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

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
source "${ROOT}/../lib.sh"

remote_config=${CONFIG_PATH}
local_config=/tmp/config.yaml
download_blob "${remote_config}" "${local_config}"

region=$(yq '.region' "${local_config}")
logical_region_name=$(yq '.name' "${local_config}")
env=$(yq '.env' "${local_config}")
aks_oidc_issuer=$(yq '.k8s.oidcIssuer' "${local_config}")
resource_group_name=$(yq '.k8s.name' "${local_config}")
dataplane_subscriptions=$(yq -ojson '.azure.dataplaneSubscriptions' "${local_config}" | jq -r '.[]')
job_id=$(yq '.jobId' "${local_config}")
remote_output=$(yq '.outputPath' "${local_config}")
local_output=/tmp/output.yaml

controlplane_tenant=$(yq '.azure.controlplaneTenantId' "${local_config}")
controlplane_subscription=$(yq '.azure.controlplaneSubscriptionId' "${local_config}")
client_id=$(yq '.azure.controlplaneClientId' "${local_config}")
tf_blob_endpoint=$(yq '.terraformStateBucket' "${local_config}")
tfstate_storage_account=$(get_blob_storage_account "${tf_blob_endpoint}")
tfstate_container=$(get_blob_container "${tf_blob_endpoint}")
tfstate_rg=$(az storage account show --name ${tfstate_storage_account} --query "resourceGroup" --output tsv)
access_key=$(az storage account keys list --account-name ${tfstate_storage_account} --resource-group ${tfstate_rg} --query "[0].value" --output tsv)
tf_common_backend_config="-backend-config=resource_group_name=${tfstate_rg} -backend-config=storage_account_name=${tfstate_storage_account} -backend-config=container_name=${tfstate_container}"

export ARM_USE_OIDC=true
export ARM_CLIENT_ID="${client_id}"
export ARM_TENANT_ID="${controlplane_tenant}"
export ARM_ACCESS_KEY="${access_key}"

deploy_tenant_id=$(yq '.azure.controlplaneTenantId' "${local_config}")
deploy_client_id=$(yq '.azure.controlplaneClientId' "${local_config}")
azureLogin $deploy_tenant_id $deploy_client_id
auto_deploy_cli_principal_id=$(az ad sp show --id "${client_id}" --query id --output tsv)

controlplane_root_dns=$(yq ".jobOptions.regionalResource.controlplaneRootDnsName // \"${env}.azure.tidbcloud.com\"" "${local_config}")
controlplane_root_dns_rg=$(az network dns zone list --query "[?name=='${controlplane_root_dns}'].resourceGroup" -o tsv)
dataplane_root_dns=$(yq ".jobOptions.regionalResource.dataplaneRootDnsName // \"${env}.azure.tidb-cloud.com\"" "${local_config}")
dataplane_root_dns_rg=$(az network dns zone list --query "[?name=='${dataplane_root_dns}'].resourceGroup" -o tsv)

tf_directory="${ROOT}/../terraform"
module_path="regional-resource"
cd "${tf_directory}/${module_path}"
tfstate="${module_path}/${controlplane_subscription}-${logical_region_name}-tfstate.json"
export ARM_SUBSCRIPTION_ID="${controlplane_subscription}"
terraform init -reconfigure ${tf_common_backend_config} -backend-config="key=${tfstate}"
terraform destroy -auto-approve -var="env=${env}" \
  -var="location=${region}" \
  -var="aks_oidc_issuer=${aks_oidc_issuer}" \
  -var="resource_group_name=${resource_group_name}" \
  -var="logical_region_name=${logical_region_name}" \
  -var="auto_deploy_cli_principal_id=${auto_deploy_cli_principal_id}" \
  -var="controlplane_root_dns=${controlplane_root_dns}" \
  -var="controlplane_root_dns_rg=${controlplane_root_dns_rg}" \
  -var="dataplane_root_dns=${dataplane_root_dns}" \
  -var="dataplane_root_dns_rg=${dataplane_root_dns_rg}"
