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

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

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

remote_regional_resource=$(yq '.jobOutput.regional-resource' "${local_config}")
local_regional_resource=/tmp/regional-resource.yaml
download_blob "${remote_regional_resource}" "${local_regional_resource}"

argocd_repo=tidbcloud/app-delivery
region=$(yq '.region' "${local_config}")
env=$(yq '.env' "${local_config}")
cloud=$(yq '.cloudProvider' "${local_config}")
cluster=$(yq '.k8s.name' "${local_config}")
jobId=$(yq '.jobId' "${local_config}")
output=$(yq '.outputPath' "${local_config}")
image_registry=$(yq '.imageRegistry' "${local_config}")

# new fields for azure
dns_zone=$(yq '.controlplaneDnsZone.name' "${local_regional_resource}")
hosted_zone_resource_group=$(yq '.k8s.name' "${local_config}")

timeout=${JOB_TIMEOUT:=300} # 5min
interval=${JOB_CHECK_INTERVAL:=10}
start_time=$(date +%s)
kong_svc=kong-kong-proxy
while [[ $(($(date +%s) - $start_time)) -lt $timeout ]]; do
  ip=$(kubectl -n kong get svc "${kong_svc}" -ojsonpath='{.status.loadBalancer.ingress[0].ip}')
  if [[ -z "$ip" ]]; then
    sleep "${interval}"
  else
    echo "Azure loadbalancer $ip is ready"
    break
  fi
done
if [[ -z "$ip" ]]; then
  echo "failed to get azure loadbalancer ip"
  exit 1
fi

# Create DNS record
record_name="regional-api"
dns_name="${record_name}.${dns_zone}"
az network dns record-set a add-record --resource-group "${hosted_zone_resource_group}" --zone-name "${dns_zone}" --record-set-name "${record_name}" --ipv4-address "${ip}"

while [[ $(($(date +%s) - $start_time)) -lt $timeout ]]; do
  nslookup "${dns_name}"
  if [[ $? -ne 0 ]];  then
    sleep "${interval}"
  else
    echo "$dns_name is ready"
    exit 0
  fi
done
exit 1 # DNS not ready
