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

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
tmpdir="$ROOT/.register-new-region-test.$$"
trap 'rm -rf "$tmpdir"' EXIT

mkdir -p \
  "$tmpdir/globalserver/karma" \
  "$tmpdir/globalserver/manifests/prod" \
  "$tmpdir/globalserver/promxy" \
  "$tmpdir/infra-v2/kube-prometheus-stack/envs/prod"

cp "$ROOT/register-new-region.sh" "$tmpdir/globalserver/register-new-region.sh"
chmod +x "$tmpdir/globalserver/register-new-region.sh"

cat >"$tmpdir/globalserver/manifests/prod/meta.json" <<'JSON'
{
  "vendors": {
    "aws": [
      {
        "region": "us-west-2",
        "routers": [
          {
            "dnsAddress": "https://www.rs.us-west-2.aws.observability.tidbcloud.com",
            "dataplaneAddress": "https://www.ds.us-west-2.aws.observability.tidbcloud.com",
            "logicalRegionName": "us-west-2"
          }
        ]
      },
      {
        "region": "us-west-2",
        "routers": [
          {
            "dnsAddress": "https://www.rs.us-west-2.aws.observability.tidbcloud.com",
            "dataplaneAddress": "https://www.ds.us-west-2.aws.observability.tidbcloud.com",
            "logicalRegionName": "us-west-2"
          }
        ]
      }
    ]
  },
  "routes": {
    "aws-us-west-2": {
      ".*": "us-west-2"
    }
  }
}
JSON

cat >"$tmpdir/globalserver/manifests/prod/configmap.yaml" <<'YAML'
apiVersion: v1
kind: ConfigMap
metadata:
  name: dummy
YAML

cat >"$tmpdir/globalserver/karma/values-prod.yaml" <<'YAML'
configMap:
  rawConfig:
    alertmanager:
      servers: []
YAML

cat >"$tmpdir/globalserver/promxy/values-prod.yaml" <<'YAML'
config:
  promxy:
    server_groups: []
YAML

cat >"$tmpdir/infra-v2/kube-prometheus-stack/envs/prod/global-aws-us-west-2.yaml" <<'YAML'
grafana:
  additionalDataSources: []
YAML

cat >"$tmpdir/register-args.json" <<'JSON'
{
  "rsAddress": "https://www.rs.us-west-2-na-test.aws.observability.tidbcloud.com",
  "dsAddress": "https://www.ds.us-west-2-na-test.aws.observability.tidbcloud.com",
  "tenantID": "1372813089208281461",
  "accessPrincipal": null,
  "accessExternalID": null
}
JSON

bash "$tmpdir/globalserver/register-new-region.sh" \
  aws \
  prod \
  us-west-2 \
  us-west-2-na-test \
  o11y-prod-us-west-2-na-test \
  "$tmpdir/register-args.json"

yq -e '.configMap.rawConfig.alertmanager.servers[] | select(.name == "aws-us-west-2-na-test" and .uri == "http://kong-kong-proxy.kong.svc.cluster.local/internal/internal/alerts/")' \
  "$tmpdir/globalserver/karma/values-prod.yaml" >/dev/null

yq -e '.configMap.rawConfig.alertmanager.servers[] | select(.name == "o11y-selfmon-aws-us-west-2-na-test" and .uri == "http://kong-kong-proxy.kong.svc.cluster.local/internal/internal/alerts/self-monitoring/")' \
  "$tmpdir/globalserver/karma/values-prod.yaml" >/dev/null

yq -e '.grafana.additionalDataSources[] | select(.name == "Prometheus-regional-us-west-2-na-test" and .url == "http://kong-kong-proxy.kong.svc.cluster.local/internal/prom/self-monitoring")' \
  "$tmpdir/infra-v2/kube-prometheus-stack/envs/prod/global-aws-us-west-2.yaml" >/dev/null

yq -e '.grafana.additionalDataSources[] | select(.name == "Loki-regional-us-west-2-na-test" and .url == "http://kong-kong-proxy.kong.svc.cluster.local/internal/loki/self-monitoring")' \
  "$tmpdir/infra-v2/kube-prometheus-stack/envs/prod/global-aws-us-west-2.yaml" >/dev/null

yq -e '.config.promxy.server_groups[] | select(.labels.k8s_cluster == "aws-us-west-2-na-test" and .path_prefix == "/internal/prom/self-monitoring/" and .http_client.headers."X-Org-Id" == "1372813089208281461")' \
  "$tmpdir/globalserver/promxy/values-prod.yaml" >/dev/null

jq -e '.routes["aws-us-west-2"]["byoc:1372813089208281461:.*"] == "us-west-2-na-test"' \
  "$tmpdir/globalserver/manifests/prod/meta.json" >/dev/null

jq -e '[.vendors.aws[] | select(.region == "us-west-2")] | length == 1' \
  "$tmpdir/globalserver/manifests/prod/meta.json" >/dev/null

jq -e '[.vendors.aws[] | select(.region == "us-west-2") | .routers[].logicalRegionName] | sort == ["us-west-2", "us-west-2-na-test"]' \
  "$tmpdir/globalserver/manifests/prod/meta.json" >/dev/null

echo "globalserver register-new-region tests passed"
