#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}")/..; pwd -P)

source $ROOT/hack/lib/vars.sh
source $ROOT/hack/lib/image.sh

PULUMI=${PULUMI:-"$ROOT/bin/pulumi"}
export PATH=$ROOT/bin:$PATH
export PULUMI_CONFIG_PASSPHRASE=

RANDOM_CLUSTER=${1:-""}
EVICT_POD_DURATION=${2:-"8h"}
SHARED_TIER_CONTEXT=${3:-"arn:aws:eks:us-east-1:385595570414:cluster/dev-us-east-1-s01"}
BASE_CONTEXT=${4:-"arn:aws:eks:us-west-2:385595570414:cluster/dev-base-us-west-2"}

$PULUMI login ${ROOT}

# up mock base stack
$PULUMI stack select mock-base-eks-e2e \
    --create \
    -C $ROOT/cd/projects/mock/base

MOCK_BASE_CONFIG=${VAR_CACHE_DIR}/Pulumi.mock-base-eks-e2e.yaml
cat << EOF > ${MOCK_BASE_CONFIG}
config:
  mock-base:kubeconfig: ${HOME}/.kube/config
  mock-base:context: ${BASE_CONTEXT}
EOF

$PULUMI up \
    --stack mock-base-eks-e2e \
    --yes \
    --config-file ${MOCK_BASE_CONFIG} \
    -C $ROOT/cd/projects/mock/base

# up mock infra api stack
$PULUMI stack select mock-infra-api-eks-e2e \
    --create \
    -C $ROOT/cd/projects/mock/infra-api

MOCK_INFRA_API_CONFIG=${VAR_CACHE_DIR}/Pulumi.mock-infra-api-eks-e2e.yaml
cat << EOF > ${MOCK_INFRA_API_CONFIG}
config:
  mock-infra-api:base-stack: mock-base-eks-e2e
  mock-infra-api:namespace: infra
  mock-infra-api:admin-secret-name: api-server-admin
  mock-infra-api:infra-api-server-in-cluster-addr: https://api-server.infra:443
  mock-infra-api:infra-api-server-addr: https://us-west-2.infra.shared.aws.tidbcloud.com:443
EOF

$PULUMI up \
    --stack mock-infra-api-eks-e2e \
    --yes \
    --config-file ${MOCK_INFRA_API_CONFIG} \
    -C $ROOT/cd/projects/mock/infra-api

# up mock sharedtier
$PULUMI stack select mock-shared-tier-eks-e2e \
    --create \
    -C $ROOT/cd/projects/mock/shared-tier

SHARED_TIER_CONFIG=${VAR_CACHE_DIR}/Pulumi.mock-shared-tier-eks-e2e.yaml
cat << EOF > ${SHARED_TIER_CONFIG}
config:
  mock-shared-tier:kubeconfig: ${HOME}/.kube/config
  mock-shared-tier:context: ${SHARED_TIER_CONTEXT}
  # mock-shared-tier:context: kind-shared-provider
  mock-shared-tier:env: dev
  mock-shared-tier:dbaas-proxy-host: a7f4ccef66000470f95961b1f5b186f4-cf132d40619cccc0.elb.us-east-1.amazonaws.com
  mock-shared-tier:aws-region: us-east-1
  mock-shared-tier:aws-account-id: 385595570414
  mock-shared-tier:cidr-block: 10.0.0.0/16
  mock-shared-tier:cluster-oidc-provider-url: oidc.eks.us-east-1.amazonaws.com/id/2E8A14B5CE2AFABBE364A65692D4675B
EOF

$PULUMI up \
    --stack mock-shared-tier-eks-e2e \
    --yes \
    --config-file ${SHARED_TIER_CONFIG} \
    -C $ROOT/cd/projects/mock/shared-tier


# up manager
$PULUMI stack select manager-eks-e2e \
    --create \
    -C $ROOT/cd/projects/manager

lib::image::get_image_vars manager

MANAGER_CONFIG=${VAR_CACHE_DIR}/Pulumi.manager-eks-e2e.yaml
cat << EOF > ${MANAGER_CONFIG}
config:
  shared-manager:base-stack: mock-base-eks-e2e
  shared-manager:infra-api-stack: mock-infra-api-eks-e2e
  shared-manager:shared-tier-stacks:
  - 'mock-shared-tier-eks-e2e:${RANDOM_CLUSTER}'
  shared-manager:image: ${IMG}
  shared-manager:namespace: e2etesting-system
  shared-manager:name-suffix: -${RANDOM_CLUSTER}
  shared-manager:namespace-annotations:
    testing.tidbcloud.com/email: $(git config user.email)
    testing.tidbcloud.com/username: $(git config user.name)

  shared-manager:config-service-url: http://config-service-mock.tidb-admin:8080
  shared-manager:evict-pod-duration: ${EVICT_POD_DURATION}
EOF

$PULUMI up \
    --stack manager-eks-e2e \
    --yes \
    --config-file ${MANAGER_CONFIG} \
    -C $ROOT/cd/projects/manager

