#!/bin/bash

set -o errexit
set -o pipefail

if [ $# -ne 5 ]
then
    echo "Usage: $0 <k8s> <env> <region> <image> <role>"
    echo
    echo "Available k8s: eks, gke"
    echo "Available env: dev, staging, prod"
    echo "Available regions: it can be region like us-west-2 for aws or us-west1 for gcp"
    echo "image: the image name available in ecr or gcr"
    exit
fi

K8S=$1
ENV=$2
REGION=$3
IMAGE=$4
ROLE=$5

echo "start deploying ${ENV} ${K8S} in ${REGION} using ${IMAGE}, role: ${ROLE}"

#echo "deploy service account start"
#sed -i "s|{role}|${ROLE}|g" ./sa_${K8S}.yaml
#kubectl apply -f ./sa_${K8S}.yaml
#echo "deploy service acccount end"

echo "deploy role start"
kubectl apply -f ./customdomain_role.yaml
echo "deploy role end"

echo "deploy ConfigMaps start"
kubectl -n dataservice delete configmap regional-server-config --ignore-not-found=true
kubectl -n dataservice create configmap regional-server-config --from-file=config/${ENV}/${REGION}
echo "deploy ConfigMaps end"

echo "load deployment config start"
source ./deployment_config/common.sh
source ./deployment_config/deployment-${ENV}-config.sh
echo "load deployment config end"

for NAME in "dataservice-dataapp-gateway" "dataservice-dataapp-executor" "dataservice-dataapp-control" ;
  do
    echo "deploy ${NAME} start"
    sed -i "s|{image}|${IMAGE}|g" ./deployment-${NAME}.yaml
    sed -i "s|{replicas}|$(deployment_config $NAME $REGION replicas)|g" ./deployment-${NAME}.yaml
    sed -i "s|{limits_cpu}|$(deployment_config $NAME $REGION limits_cpu)|g" ./deployment-${NAME}.yaml
    sed -i "s|{limits_memory}|$(deployment_config $NAME $REGION limits_memory)|g" ./deployment-${NAME}.yaml
    sed -i "s|{requests_cpu}|$(deployment_config $NAME $REGION requests_cpu)|g" ./deployment-${NAME}.yaml
    sed -i "s|{requests_memory}|$(deployment_config $NAME $REGION requests_memory)|g" ./deployment-${NAME}.yaml
    kubectl apply -f ./deployment-${NAME}.yaml
    echo "deploy ${NAME} end"

    echo "deploy ${NAME} svc start"
    kubectl apply -f ./svc-${NAME}.yaml
    echo "deploy ${NAME} svc end"

    echo "deploy ${NAME} service monitor start"
    cp ./service-monitor-template.yaml ./service-monitor-${NAME}.yaml
    sed -i "s|{name}|${NAME}|g" ./service-monitor-${NAME}.yaml
    kubectl apply -f  ./service-monitor-${NAME}.yaml
    if [ "$NAME" == "dataservice-dataapp-executor" ]; then
      kubectl apply -f  ./service-monitor-measure.yaml
    fi
    echo "deploy ${NAME} service monitor end"

    echo "apply ${NAME} rules start"
    link=""
    if [ $ENV == "prod" ]; then
      link="https://self-monitoring-grafana.observability.tidbcloud.com/explore?orgId=1\&left=%7B%22datasource%22:%22Loki-regional-us-west-2%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22editorMode%22:%22builder%22,%22expr%22:%22%7Bcluster%3D%5C%22o11y-control-plane%5C%22,%20container%3D%5C%22dataservice-dataapp-executor%5C%22%7D%20%7C%3D%20%60ERROR%60%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22now-30m%22,%22to%22:%22now%22%7D%7D"
    elif [ $ENV == "staging" ]; then
      link="https://self-monitoring-grafana.observability-staging.pingcap.cloud/explore?orgId=1\&left=%7B%22datasource%22:%22Loki-regional-us-west-2%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22editorMode%22:%22builder%22,%22expr%22:%22%7Bcluster%3D%5C%22o11y-control-plane%5C%22,%20container%3D%5C%22dataservice-dataapp-executor%5C%22%7D%20%7C%3D%20%60ERROR%60%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22now-30m%22,%22to%22:%22now%22%7D%7D"
    else
      link="https://self-monitoring-grafana.observability-dev.pingcap.cloud/explore?orgId=1\&left=%7B%22datasource%22:%22Loki-regional-us-west-2%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22editorMode%22:%22builder%22,%22expr%22:%22%7Bcluster%3D%5C%22o11y-control-plane%5C%22,%20container%3D%5C%22dataservice-dataapp-executor%5C%22%7D%20%7C%3D%20%60ERROR%60%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22now-30m%22,%22to%22:%22now%22%7D%7D"
    fi

    sed -i "s|{loki_link}|${link}|g" ./rules/${NAME}.yaml
    kubectl apply -f  ./rules/${NAME}.yaml
    echo "apply ${NAME} rules end"
  done
