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

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

query_api() {
  local expr="$1"
  python3 - "$expr" <<'PYEOF'
import json
import sys
import urllib.parse
import urllib.request

expr = sys.argv[1]
url = "http://127.0.0.1:%s/api/v1/query?query=%s" % (
    __import__("os").environ["PROM_E2E_PROMETHEUS_PORT"],
    urllib.parse.quote(expr, safe=""),
)
with urllib.request.urlopen(url, timeout=15) as resp:
    data = json.load(resp)
print(json.dumps(data, separators=(",", ":")))
PYEOF
}

assert_non_empty_query() {
  local label="$1"
  local expr="$2"
  local output
  output="$(PROM_E2E_PROMETHEUS_PORT="${PROM_E2E_PROMETHEUS_PORT}" query_api "${expr}")"
  echo "${label}: ${output}" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
  python3 - "${output}" <<'PYEOF'
import json
import sys
payload = json.loads(sys.argv[1])
result = payload.get("data", {}).get("result", [])
if not result:
    raise SystemExit(1)
PYEOF
}

assert_query_value() {
  local label="$1"
  local expr="$2"
  local expected="$3"
  local output
  output="$(PROM_E2E_PROMETHEUS_PORT="${PROM_E2E_PROMETHEUS_PORT}" query_api "${expr}")"
  echo "${label}: ${output}" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
  python3 - "${output}" "${expected}" <<'PYEOF'
import json
import sys

payload = json.loads(sys.argv[1])
expected = sys.argv[2]
result = payload.get("data", {}).get("result", [])
if len(result) != 1:
    raise SystemExit(1)
actual = result[0].get("value", [None, None])[1]
if actual != expected:
    raise SystemExit(1)
PYEOF
}

echo "================================================================" | tee "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
echo " prom-e2e verify" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
echo "================================================================" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"

# Dedicated does not expose NextGen DB/storage metrics in code.
# For Dedicated, verify the scrape path itself is healthy.
assert_query_value \
  "dedicated.scrape_up" \
  "up{job=\"dedicated\"}" \
  "1"

assert_query_value \
  "premium.scrape_up" \
  "up{job=\"premium\"}" \
  "1"
assert_non_empty_query \
  "premium.db_total_connection" \
  "tidbcloud_db_total_connection{instance_id=\"${CLUSTER_ID_PREMIUM}\"}"
assert_non_empty_query \
  "premium.db_row_storage_used_bytes" \
  "tidbcloud_db_row_storage_used_bytes{instance_id=\"${CLUSTER_ID_PREMIUM}\"}"

assert_query_value \
  "essential.scrape_up" \
  "up{job=\"essential\"}" \
  "1"
assert_non_empty_query \
  "essential.db_total_connection" \
  "tidbcloud_db_total_connection{instance_id=\"${CLUSTER_ID_ESSENTIAL}\"}"
assert_non_empty_query \
  "essential.db_row_storage_used_bytes" \
  "tidbcloud_db_row_storage_used_bytes{instance_id=\"${CLUSTER_ID_ESSENTIAL}\"}"

assert_query_value \
  "starter.scrape_up" \
  "up{job=\"starter\"}" \
  "1"
assert_non_empty_query \
  "starter.db_total_connection" \
  "tidbcloud_db_total_connection{instance_id=\"${CLUSTER_ID_STARTER}\"}"
assert_non_empty_query \
  "starter.db_row_storage_used_bytes" \
  "tidbcloud_db_row_storage_used_bytes{instance_id=\"${CLUSTER_ID_STARTER}\"}"

echo "" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
echo "dashboards:" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
curl -fsS -u admin:admin "http://127.0.0.1:${PROM_E2E_GRAFANA_PORT}/api/search?type=dash-db" \
  | tee "${PROM_E2E_RESULT_DIR}/grafana-dashboards.json" \
  | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt" >/dev/null

echo "" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
echo "✅ prom-e2e verification passed" | tee -a "${PROM_E2E_RESULT_DIR}/verify-summary.txt"
