#!/usr/bin/env bash
set -euo pipefail

PROJECT=${PROJECT:-}
if [[ -z $PROJECT ]] ; then
	echo "PROJECT must be set. Usually this is set to your user $USER" >&2
	exit 1
fi

REGION=${REGION:-us-west-2}

# Create the namespace if not exist.
kubectl ctx `kubectl config get-contexts --output=name | grep dev-base` # Switch to the base cluster
if ! kubectl get ns ${PROJECT} ; then
	kubectl create ns ${PROJECT}
fi

# Create the service account if not exist.
if ! kubectl get sa central ; then
	kubectl create sa central -n ${PROJECT}
	ENV=${ENV:-}
	if [[ -z $ENV ]] ; then
		ENV=dev
	fi
	AccountId=`aws sts get-caller-identity --query "Account" --output text`
	kubectl annotate sa central eks.amazonaws.com/role-arn="arn:aws:iam::${AccountId}:role/dbaas-central-role-${ENV}" -n ${PROJECT}
fi

# Create a secret contains the route53 credentials if not exist.
kubectl config set-context --current --namespace "${PROJECT}"
if ! kubectl get secret aws-route53-credentials ; then
	kubectl create secret generic aws-route53-credentials --from-literal=AWS_ACCESS_KEY_ID='' --from-literal=AWS_SECRET_ACCESS_KEY=''
fi

# ==================
# Setup pulumi stack

# In `tidbcloud/dbaas` repository root:
PULUMI_DIR="$(dirname "$0")/../deployments/pulumi"
(cd "$PULUMI_DIR" && npm install)
export PULUMI_CONFIG_PASSPHRASE=wearepingcap
pulumi -C "${PULUMI_DIR}" login --local
export AWS_REGION=$REGION
if ! pulumi -C "${PULUMI_DIR}" stack ls | grep  "${PROJECT}" ; then
	cp "${PULUMI_DIR}/Pulumi.dev.yaml" "${PULUMI_DIR}/Pulumi.${PROJECT}.yaml"
	pulumi -C "${PULUMI_DIR}" stack select "${PROJECT}" --create
	echo "stack ${PROJECT} initialized"
fi

# Copy configurations from the dev stack.
if ! test -f "${PULUMI_DIR}/Pulumi.${PROJECT}.yaml" ; then
	cp "${PULUMI_DIR}/Pulumi.dev.yaml" "${PULUMI_DIR}/Pulumi.${PROJECT}.yaml"
	pulumi -C "${PULUMI_DIR}" stack select "${PROJECT}" --create
fi

pulumi -C "${PULUMI_DIR}" config set metrics:project "${PROJECT}"
pulumi -C "${PULUMI_DIR}" config set metrics:ecrProject "${PROJECT}"
pulumi -C "${PULUMI_DIR}" config set metrics:sharedMetadbUser "${PROJECT}"
# In nightly stack it will deploy a blackbox to a shared namespace. In our personal stacks we don't need it.
pulumi -C "${PULUMI_DIR}" config set metrics:enableBlackbox false
pulumi -C "${PULUMI_DIR}" config set kubernetes:context `kubectl config get-contexts --output=name | grep dev-base`

echo "pulumi stack ${PROJECT} setup. Teardown with:"
echo "aws-vault exec dev -- pulumi -C ${PULUMI_DIR} destroy"
