#!/usr/bin/env bash
# Seed B2B test accounts (owner / trainer / member) on a single test center.
# Idempotent — safe to re-run. Writes test_accounts.json (gitignored).
#
# Usage:
#   SUPABASE_SERVICE_ROLE_KEY=... scripts/seed-b2b-test-accounts.sh
#
# Or pull from CLI:
#   SUPABASE_SERVICE_ROLE_KEY=$(supabase projects api-keys --project-ref xronafnxeseggprcbshx 2>/dev/null \
#     | awk -F'|' '/service_role/ {gsub(/ /,"",$3); print $3}') \
#     scripts/seed-b2b-test-accounts.sh
set -euo pipefail

URL="${SUPABASE_URL:-https://xronafnxeseggprcbshx.supabase.co}"
SK="${SUPABASE_SERVICE_ROLE_KEY:?SUPABASE_SERVICE_ROLE_KEY required}"
PASSWORD="${SEED_PASSWORD:-Test1234!}"
CENTER_NAME="${SEED_CENTER_NAME:-Test Studio (E2E)}"
DOMAIN="test.roomfit.local"

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
OUT="$ROOT/apps/b2b/test_accounts.json"

curl_admin() { curl -sS "$URL$1" -H "apikey: $SK" -H "Authorization: Bearer $SK" "${@:2}"; }
curl_pgr()   { curl_admin "$1" -H "Content-Type: application/json" "${@:2}"; }

# 1. Create or fetch user. Echo user_id.
upsert_user() {
  local email="$1"
  local existing
  existing=$(curl_admin "/auth/v1/admin/users?per_page=200" \
    | python3 -c "import sys,json; d=json.load(sys.stdin); [print(u['id']) for u in d.get('users',[]) if (u.get('email') or '').lower()=='$email'.lower()]")
  if [[ -n "$existing" ]]; then
    echo "$existing"
    return
  fi
  curl_pgr "/auth/v1/admin/users" -X POST \
    -d "{\"email\":\"$email\",\"password\":\"$PASSWORD\",\"email_confirm\":true}" \
    | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])"
}

OWNER_EMAIL="b2b-owner@$DOMAIN"
TRAINER_EMAIL="b2b-trainer@$DOMAIN"
MEMBER_EMAIL="b2b-member@$DOMAIN"

echo "==> creating users"
OWNER_ID=$(upsert_user "$OWNER_EMAIL")
TRAINER_ID=$(upsert_user "$TRAINER_EMAIL")
MEMBER_ID=$(upsert_user "$MEMBER_EMAIL")
echo "    owner=$OWNER_ID  trainer=$TRAINER_ID  member=$MEMBER_ID"

# 2. Center — pick existing by name or create.
echo "==> upserting center '$CENTER_NAME'"
CENTER_ID=$(curl_pgr "/rest/v1/centers?name=eq.$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))" "$CENTER_NAME")&select=id" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d[0]['id'] if d else '')")

if [[ -z "$CENTER_ID" ]]; then
  CENTER_ID=$(curl_pgr "/rest/v1/centers" -X POST -H "Prefer: return=representation" \
    -d "{\"name\":\"$CENTER_NAME\",\"owner_id\":\"$OWNER_ID\"}" \
    | python3 -c "import sys,json; print(json.load(sys.stdin)[0]['id'])")
fi
echo "    center=$CENTER_ID"

# 3. Memberships — upsert each role (+ display_name for realistic UX).
upsert_membership() {
  local user_id="$1"
  local role="$2"
  local display_name="$3"
  curl_pgr "/rest/v1/center_memberships?on_conflict=center_id,user_id" -X POST \
    -H "Prefer: resolution=merge-duplicates,return=minimal" \
    -d "{\"center_id\":\"$CENTER_ID\",\"user_id\":\"$user_id\",\"role\":\"$role\",\"display_name\":\"$display_name\"}"
}

echo "==> upserting memberships"
upsert_membership "$OWNER_ID"   "owner"   "테스트 오너"
upsert_membership "$TRAINER_ID" "trainer" "테스트 트레이너"
upsert_membership "$MEMBER_ID"  "member"  "테스트 회원"

# 4. Write credentials file (gitignored).
mkdir -p "$(dirname "$OUT")"
cat > "$OUT" <<JSON
{
  "supabase_url": "$URL",
  "center_id": "$CENTER_ID",
  "center_name": "$CENTER_NAME",
  "password": "$PASSWORD",
  "accounts": {
    "owner":   { "email": "$OWNER_EMAIL",   "user_id": "$OWNER_ID",   "display_name": "테스트 오너" },
    "trainer": { "email": "$TRAINER_EMAIL", "user_id": "$TRAINER_ID", "display_name": "테스트 트레이너" },
    "member":  { "email": "$MEMBER_EMAIL",  "user_id": "$MEMBER_ID",  "display_name": "테스트 회원" }
  }
}
JSON
echo "==> wrote $OUT"
