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

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

mkdir -p \
  "$TEST_TMPDIR/deployments/infra-v2" \
  "$TEST_TMPDIR/deployments/lib"

cp "$REPO_ROOT/deployments/infra-v2/deploy.sh" \
  "$TEST_TMPDIR/deployments/infra-v2/deploy.sh"
cp "$REPO_ROOT/deployments/lib/lib.sh" "$TEST_TMPDIR/deployments/lib/lib.sh"

cat >"$TEST_TMPDIR/deployments/infra-v2/deploy-with-ops.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' "$*" > "$TEST_DEPLOY_WITH_OPS_LOG"
EOF
chmod +x "$TEST_TMPDIR/deployments/infra-v2/deploy-with-ops.sh"

export TEST_DEPLOY_WITH_OPS_LOG="$TEST_TMPDIR/deploy-with-ops.log"

AUTH0_CLIENT_ID=client-id AUTH0_CLIENT_SECRET=client-secret MANAGED_BY_OPS_SERVER=true \
  bash "$TEST_TMPDIR/deployments/infra-v2/deploy.sh" \
    regional dev aks-customer eastus eastus-byoc azure

test "$(cat "$TEST_DEPLOY_WITH_OPS_LOG")" = "regional dev aks-customer eastus eastus-byoc azure"

if MANAGED_BY_OPS_SERVER=true bash "$TEST_TMPDIR/deployments/infra-v2/deploy.sh" \
  regional dev aks-customer eastus eastus-byoc azure 2>"$TEST_TMPDIR/missing-client-id.err"; then
  echo "managed infra deploy should require AUTH0_CLIENT_ID" >&2
  exit 1
fi
grep -q "AUTH0_CLIENT_ID is required for managed ops deploys" "$TEST_TMPDIR/missing-client-id.err"

if AUTH0_CLIENT_ID=client-id MANAGED_BY_OPS_SERVER=true bash "$TEST_TMPDIR/deployments/infra-v2/deploy.sh" \
  regional dev aks-customer eastus eastus-byoc azure 2>"$TEST_TMPDIR/missing-client-secret.err"; then
  echo "managed infra deploy should require AUTH0_CLIENT_SECRET" >&2
  exit 1
fi
grep -q "AUTH0_CLIENT_SECRET is required for managed ops deploys" "$TEST_TMPDIR/missing-client-secret.err"

if grep -Eq 'ops-server/envs|helm .*ops-server|rollout status deployment/ops-server|helmrepository/o11y-helm-repo' \
  "$REPO_ROOT/deployments/infra-v2/deploy.sh"; then
  echo "deploy.sh should not directly install or wait for ops-server" >&2
  exit 1
fi

echo "infra-v2 deploy tests passed"
