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

REPO_ROOT=$(unset CDPATH && cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT

mkdir -p \
  "$TMPDIR/deployments/dataplane/vmcluster" \
  "$TMPDIR/deployments/dataplane/vmcluster/variants"

cp "$REPO_ROOT/deployments/dataplane/vmcluster/deploy-new-region.sh" \
  "$TMPDIR/deployments/dataplane/vmcluster/deploy-new-region.sh"
cp "$REPO_ROOT/deployments/dataplane/vmcluster/variants/staging-aws-byoc-values-tmpl.yaml" \
  "$TMPDIR/deployments/dataplane/vmcluster/variants/staging-aws-byoc-values-tmpl.yaml"
cp "$REPO_ROOT/deployments/dataplane/vmcluster/variants/prod-aws-byoc-values-tmpl.yaml" \
  "$TMPDIR/deployments/dataplane/vmcluster/variants/prod-aws-byoc-values-tmpl.yaml"
cp "$REPO_ROOT/deployments/dataplane/vmcluster/variants/prod-aws-values-tmpl.yaml" \
  "$TMPDIR/deployments/dataplane/vmcluster/variants/prod-aws-values-tmpl.yaml"

cat >"$TMPDIR/input.json" <<'EOF'
{
  "vmclusterBucketName": "o11y-staging-shared-usw2-byoc-wkly",
  "vmclusterRoleARN": "arn:aws:iam::123456789012:role/o11y-control-plane",
  "nginxReadIngressClass": "nginx-read",
  "nginxWriteIngressClass": "nginx-write",
  "imageRegistry": "123456789012.dkr.ecr.us-west-2.amazonaws.com",
  "storageAccountName": "",
  "byoc": true
}
EOF

jq -c . "$TMPDIR/input.json" | jq -R . >"$TMPDIR/workflow-input.json"

bash "$TMPDIR/deployments/dataplane/vmcluster/deploy-new-region.sh" \
  aws staging us-west-2 usw2-byoc-wkly o11y-staging-usw2-byoc-wkly "$TMPDIR/workflow-input.json"

values="$TMPDIR/deployments/dataplane/vmcluster/envs/staging-aws-usw2-byoc-wkly/values.yaml"
test -f "$values"
! grep -q 'TMPL_' "$values"
test "$(yq eval '.vmbackup.mode' "$values")" = "manager"
test "$(yq eval '.vmbackup.image' "$values")" = "123456789012.dkr.ecr.us-west-2.amazonaws.com/observability/vmbackupmanager:f82e69ce98fb871f5996a1f9ea92e4480943b68c"
test "$(yq eval '.vmcluster.spec.vminsert.image.tag' "$values")" = "v1.122.2-cluster"
test "$(yq eval '.ingress.dataplaneReadClinicMultitenantInternal.rules[0].http.paths[0].path' "$values")" = "/internal/v2/metrics/multitenant/(.*)"
test "$(yq eval '.ingress.dataplaneReadMultitenant.rules[0].http.paths[0].path' "$values")" = "/multitenant/metrics/(.*)"

cat >"$TMPDIR/input-byoc.json" <<'EOF'
{
  "vmclusterBucketName": "o11y-prod-shared-usw2-byoc-wkly",
  "vmclusterRoleARN": "arn:aws:iam::123456789012:role/o11y-control-plane",
  "nginxReadIngressClass": "nginx-read",
  "nginxWriteIngressClass": "nginx-write",
  "imageRegistry": "123456789012.dkr.ecr.us-west-2.amazonaws.com",
  "storageAccountName": "",
  "byoc": true
}
EOF

jq -c . "$TMPDIR/input-byoc.json" | jq -R . >"$TMPDIR/workflow-input-byoc.json"

bash "$TMPDIR/deployments/dataplane/vmcluster/deploy-new-region.sh" \
  aws prod us-west-2 usw2-byoc-wkly o11y-prod-usw2-byoc-wkly "$TMPDIR/workflow-input-byoc.json"

byoc_values="$TMPDIR/deployments/dataplane/vmcluster/envs/prod-aws-usw2-byoc-wkly/values.yaml"
test -f "$byoc_values"
test ! -f "$TMPDIR/deployments/dataplane/vmcluster/envs/prod-aws-usw2-byoc-wkly/vmcluster.yaml"
! grep -q 'TMPL_' "$byoc_values"
test "$(yq eval '.vmbackup.mode' "$byoc_values")" = "manager"
test "$(yq eval '.vmbackup.image' "$byoc_values")" = "123456789012.dkr.ecr.us-west-2.amazonaws.com/observability/vmbackupmanager:f82e69ce98fb871f5996a1f9ea92e4480943b68c"
test "$(yq eval '.ingress.devDataplaneRead // "missing"' "$byoc_values")" = "missing"
test "$(yq eval '.ingress.prodDataplaneNextgenOpenRead // "missing"' "$byoc_values")" = "missing"
test "$(yq eval '.ingress.devDataplaneNextgenOpenReadDiagnosisQuery // "missing"' "$byoc_values")" = "missing"
test "$(yq eval '.ingress.dataplaneReadClinicMultitenantInternal.rules[0].http.paths[0].path' "$byoc_values")" = "/internal/v2/metrics/multitenant/(.*)"
test "$(yq eval '.ingress.dataplaneReadMultitenant.rules[0].http.paths[0].path' "$byoc_values")" = "/multitenant/metrics/(.*)"

cat >"$TMPDIR/input-standard.json" <<'EOF'
{
  "vmclusterBucketName": "o11y-prod-shared-apse2",
  "vmclusterRoleARN": "arn:aws:iam::123456789012:role/o11y-control-plane",
  "nginxReadIngressClass": "nginx-read",
  "nginxWriteIngressClass": "nginx-write",
  "imageRegistry": "123456789012.dkr.ecr.us-west-2.amazonaws.com",
  "storageAccountName": ""
}
EOF

jq -c . "$TMPDIR/input-standard.json" | jq -R . >"$TMPDIR/workflow-input-standard.json"

bash "$TMPDIR/deployments/dataplane/vmcluster/deploy-new-region.sh" \
  aws prod ap-southeast-2 ap-southeast-2 o11y-prod-apse2 "$TMPDIR/workflow-input-standard.json"

standard_values="$TMPDIR/deployments/dataplane/vmcluster/envs/prod-aws-ap-southeast-2/values.yaml"
test -f "$standard_values"
test ! -f "$TMPDIR/deployments/dataplane/vmcluster/envs/prod-aws-ap-southeast-2/vmcluster.yaml"
test "$(yq eval '.ingress.dataplaneReadClinicMultitenantInternal.rules[0].http.paths[0].path' "$standard_values")" = "/internal/v2/metrics/multitenant/(.*)"
test "$(yq eval '.ingress.dataplaneReadMultitenant // "missing"' "$standard_values")" = "missing"
! grep -q 'TMPL_' "$standard_values"
test "$(yq eval '.vmcluster.spec.vminsert.image.tag' "$standard_values")" = "v1.122.2-cluster-hotfix-20260305"
test "$(yq eval '.ingress.dataplaneReadInternal.name' "$standard_values")" = "dataplane-read-internal"
test "$(yq eval '.ingress.devDataplaneRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.stagingDataplaneRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.dataplaneRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.devDataplaneNextgenOpenRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.stagingDataplaneNextgenOpenRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.prodDataplaneNextgenOpenRead // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.devDataplaneNextgenOpenReadDiagnosisQuery // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.stagingDataplaneNextgenOpenReadDiagnosisQuery // "missing"' "$standard_values")" = "missing"
test "$(yq eval '.ingress.prodDataplaneNextgenOpenReadDiagnosisQuery // "missing"' "$standard_values")" = "missing"
