#!/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/pulumi/util.sh

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

MOCK_BASE_STACK=mock-base
MOCK_INFRA_API_STACK=mock-infra-api
MOCK_EKS_SHARED_TIER_STACK=mock-shared-tier-eks
MOCK_GKE_SHARED_TIER_STACK=mock-shared-tier-gke

lib::pulumi::e2e::mock::mock_base_stack() {
    local base_kubeconfig=${1:-""}
    local base_context=${2:-""}

    local stack=${MOCK_BASE_STACK}

    mkdir -p ${VAR_CACHE_DIR}/config/mock
    local config=${VAR_CACHE_DIR}/config/mock/Pulumi.${stack}.yaml
    cat << EOF > ${config}
config:
    mock-base:kubeconfig: ${base_kubeconfig}
    mock-base:context: ${base_context}
EOF

    lib::pulumi::util::ensure_stack ${stack} $ROOT/cd/projects/mock/base

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

lib::pulumi::e2e::mock::mock_infra_api_stack() {
    local base_stack=${MOCK_BASE_STACK}
    local stack=${MOCK_INFRA_API_STACK}

    mkdir -p ${VAR_CACHE_DIR}/config/mock
    local config=${VAR_CACHE_DIR}/config/mock/Pulumi.{stack}.yaml

    cat << EOF > ${config}
config:
  mock-infra-api:base-stack: ${base_stack}
  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

    lib::pulumi::util::ensure_stack ${stack} $ROOT/cd/projects/mock/infra-api

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

lib::pulumi::e2e::mock::mock_eks_shared_tier_stack() {
    local kubeconfig=${1}
    local context=${2}

    local base_stack=${MOCK_BASE_STACK}
    local infra_api_stack=${MOCK_INFRA_API_STACK}
    local stack=${MOCK_EKS_SHARED_TIER_STACK}

    mkdir -p ${VAR_CACHE_DIR}/config/mock
    local config=${VAR_CACHE_DIR}/config/mock/Pulumi.{stack}.yaml

    cat << EOF > ${config}
config:
  mock-shared-tier:kubeconfig: ${kubeconfig}
  mock-shared-tier:context: ${context}
  mock-shared-tier:env: dev
  mock-shared-tier:provider-type: eks
  mock-shared-tier:cluster-name: dev-us-east-1-s01
  mock-shared-tier:aws-region: us-east-1
  mock-shared-tier:gcp-region: ""
  mock-shared-tier:aws-account-id: 385595570414
  mock-shared-tier:cidr-block: 10.0.0.0/16
  mock-shared-tier:public-hosted-zone-domain: clusters.dev.tidb-cloud.com
  mock-shared-tier:public-hosted-zone-id: Z001609810TV4E79YOP22
  # TODO: use cli to get it
  mock-shared-tier:dbaas-proxy-host: ac5338266ecc249c5b109dae5920a26e-9528d881b588d7ec.elb.us-east-1.amazonaws.com
  mock-shared-tier:cluster-oidc-provider-url: oidc.eks.us-east-1.amazonaws.com/id/50AE057AFD1FD81D85E267F28A716420
EOF


    lib::pulumi::util::ensure_stack ${stack} $ROOT/cd/projects/mock/shared-tier

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

lib::pulumi::e2e::mock::mock_gke_shared_tier_stack() {
    local kubeconfig=${1}
    local context=${2}

    local base_stack=${MOCK_BASE_STACK}
    local infra_api_stack=${MOCK_INFRA_API_STACK}
    local stack=${MOCK_GKE_SHARED_TIER_STACK}

    mkdir -p ${VAR_CACHE_DIR}/config/mock
    local config=${VAR_CACHE_DIR}/config/mock/Pulumi.{stack}.yaml

    cat << EOF > ${config}
config:
  mock-shared-tier:kubeconfig: ${kubeconfig}
  mock-shared-tier:context: ${context}
  mock-shared-tier:env: dev
  mock-shared-tier:provider-type: gke
  # TODO: recheck the args
  mock-shared-tier:cluster-name: dev-us-east1-test
  mock-shared-tier:public-hosted-zone-domain: clusters.dev.tidb-cloud.com
  mock-shared-tier:public-hosted-zone-id: Z001609810TV4E79YOP22
  mock-shared-tier:aws-region: us-east-1
  mock-shared-tier:gcp-region: us-east1
  mock-shared-tier:gcp-project: pingcap-gardener
  mock-shared-tier:aws-account-id: 385595570414
  mock-shared-tier:cidr-block: 10.0.0.0/16
  mock-shared-tier:dbaas-proxy-host: "test.com"
  mock-shared-tier:cluster-oidc-provider-url: container.googleapis.com/v1/projects/pingcap-gardener/locations/us-east1-b/clusters/dev-us-east1-test
EOF

    lib::pulumi::util::ensure_stack ${stack} $ROOT/cd/projects/mock/shared-tier

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