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

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

fail() {
  echo "ERROR: $*" >&2
  exit 1
}

for fn in get_helmrelease validate_context validate_live_env capture_dataplane_state verify_helmrelease_ready verify_dataplane_health compare_snapshots cleanup_dataplane_state; do
  if ! declare -f "$fn" >/dev/null; then
    echo "missing function $fn"
    exit 1
  fi
done

mint_ops_api_token() {
  [[ "${OPS_API_ACCESS_TOKEN:-}" == "test-token" ]] || fail "get_helmrelease did not seed OPS_API_ACCESS_TOKEN from O11Y_OPS_API_TOKEN"
  echo "$OPS_API_ACCESS_TOKEN"
}

build_ops_api_headers() {
  local token="$1"
  local region_id="$2"
  local logical_region="$3"

  [[ "$token" == "test-token" ]] || fail "unexpected token: $token"
  [[ "$region_id" == "aws-test-1" ]] || fail "unexpected region id: $region_id"
  [[ "$logical_region" == "test-logical" ]] || fail "unexpected logical region: $logical_region"

  jq -n \
    --arg token "$token" \
    --arg region_id "$region_id" \
    --arg logical_region "$logical_region" \
    '{stub: "headers", token: $token, region_id: $region_id, logical_region: $logical_region}'
}

ops_api_request() {
  local method="$1"
  local base_url="$2"
  local path="$3"
  local headers_json="$4"

  [[ "$method" == "GET" ]] || fail "unexpected method: $method"
  [[ "$base_url" == "https://ops.example.test" ]] || fail "unexpected base url: $base_url"
  [[ "$path" == "helmreleases/dataplane-vmcluster" ]] || fail "unexpected path: $path"
  echo "$headers_json" | jq -e '
    .stub == "headers" and
    .token == "test-token" and
    .region_id == "aws-test-1" and
    .logical_region == "test-logical"
  ' >/dev/null || fail "unexpected headers json: $headers_json"

  echo '{"data":{"name":"dataplane-vmcluster"}}'
}

OPS_API_ACCESS_TOKEN=""
O11Y_OPS_API_TOKEN="test-token"
O11Y_OPS_API_REGION_ID="aws-test-1"
O11Y_OPS_API_LOGICAL_REGION="test-logical"
fallback_response="$(get_helmrelease "https://ops.example.test" "dataplane-vmcluster")"
[[ "$fallback_response" == '{"data":{"name":"dataplane-vmcluster"}}' ]] || fail "unexpected get_helmrelease response: $fallback_response"

cleanup_dataplane_state

echo "dataplane adoption helper tests passed"
