#!/usr/bin/env bash
# iyzico sandbox yapılandırma kontrolü + (opsiyonel) checkout initialize probu.
#
# 1) Env doğrulama:
#    FAUNAMIX_ENV_FILE=api/.env.railway ./scripts/run-iyzico-sandbox-probe.sh
#
# 2) Canlı API üzerinde checkout URL üretimi (DB'de ürün + stok gerekir):
#    FAUNAMIX_ENV_FILE=api/.env.railway \
#    FAUNAMIX_SMOKE_API_URL=https://faunamix-production.up.railway.app \
#    FAUNAMIX_IYZICO_PROBE_CHECKOUT=1 \
#    ./scripts/run-iyzico-sandbox-probe.sh
#
# Test kartı (iyzico sandbox): 5528 7900 0000 0001 — SKT/CVV paneldeki sandbox değerleri.
set -euo pipefail

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
API="${FAUNAMIX_SMOKE_API_URL:-https://faunamix-production.up.railway.app}"
API="${API%/}"
PHP_BIN="${FAUNAMIX_PHP_BIN:-php}"

if [[ -n "${FAUNAMIX_ENV_FILE:-}" && -f "$FAUNAMIX_ENV_FILE" ]]; then
  # shellcheck disable=SC1090
  set -a && source "$FAUNAMIX_ENV_FILE" && set +a
elif [[ -f "$ROOT/api/.env" ]]; then
  set -a
  # shellcheck disable=SC1091
  source "$ROOT/api/.env"
  set +a
fi

echo "iyzico sandbox probe"
echo "  API: $API"
echo ""

FAIL=0

echo "=== Adım 1: Ortam değişkenleri ==="
if ! FAUNAMIX_GO_LIVE_ALLOW_SANDBOX=1 "$PHP_BIN" "$ROOT/scripts/verify-iyzico-production-ready.php"; then
  echo ""
  echo "BLOCKER: Railway/Vercel ortamında şunları ayarlayın:"
  echo "  FAUNAMIX_IYZI_API_KEY=<sandbox api key>"
  echo "  FAUNAMIX_IYZI_SECRET_KEY=<sandbox secret>"
  echo "  FAUNAMIX_IYZI_BASE_URL=https://sandbox-api.iyzipay.com"
  echo "  FAUNAMIX_IYZI_CALLBACK_URL=https://<api-host>/api/payment_callback_iyzico.php"
  echo "  composer install (api/ içinde — iyzico SDK)"
  exit 1
fi

echo ""
echo "=== Adım 2: SDK ==="
if [[ ! -f "$ROOT/api/vendor/autoload.php" ]]; then
  echo "[FAIL] api/vendor/autoload.php yok — cd api && composer install"
  exit 1
fi
echo "[OK] iyzico SDK vendor mevcut"

echo ""
echo "=== Adım 3: Telefon normalizasyonu ==="
if ! "$PHP_BIN" "$ROOT/api/tests/phone_tr_contract.php"; then
  echo "[FAIL] phone_tr_contract"
  exit 1
fi
echo "[OK] TR telefon → +90… iyzico biçimi"

if [[ "${FAUNAMIX_IYZICO_PROBE_CHECKOUT:-0}" != "1" ]]; then
  echo ""
  echo "Checkout probu atlandı (FAUNAMIX_IYZICO_PROBE_CHECKOUT=1 ile açın)."
  echo ""
  echo "Manuel test:"
  echo "  1. www.faunamix.com/sepet → ürün ekle"
  echo "  2. Telefon: +90 532 000 00 00 veya 0532 000 00 00"
  echo "  3. Hukuki onay kutuları + ödeme → iyzico sandbox sayfası açılmalı"
  echo "  4. Kart: 5528 7900 0000 0001"
  echo "  5. /odeme/sonuc ve admin sipariş durumu: paid"
  exit 0
fi

echo ""
echo "=== Adım 4: checkout_create → checkout_url ==="

FILTER=$(curl -sf --max-time 25 -X POST "$API/api/filter.php" \
  -H "Content-Type: application/json" \
  -d '{"page":1,"page_size":1}' || echo "")
PRODUCT_ID=$(printf '%s' "$FILTER" | "$PHP_BIN" -r '
  $j = json_decode(stream_get_contents(STDIN), true);
  $p = $j["products"][0]["id"] ?? null;
  if ($p) echo (int)$p;
')

if [[ -z "${PRODUCT_ID:-}" ]]; then
  echo "[FAIL] filter.php ürün döndürmedi — panelden en az bir aktif ürün ekleyin"
  exit 1
fi

CHECKOUT_BODY=$(cat <<EOF
{
  "items": [{"product_id": $PRODUCT_ID, "quantity": 1}],
  "customer": {
    "full_name": "Sandbox Probe",
    "email": "sandbox-probe-$(date +%s)@faunamix.local",
    "phone": "+90 532 000 00 01",
    "identity_no": "11111111111",
    "city": "Muğla",
    "district": "Fethiye",
    "address_line": "Probe Mah. Test Sok. No:1",
    "postal_code": "48300",
    "shipping_method": "standard"
  },
  "legal_acceptances": {
    "mesafeli": true,
    "on_bilgilendirme": true,
    "iade": true,
    "gizlilik": true
  }
}
EOF
)

RESP=$(curl -sf --max-time 60 -X POST "$API/api/checkout_create.php" \
  -H "Content-Type: application/json" \
  -d "$CHECKOUT_BODY" || echo '{"ok":false}')

PROBE_REPORT="$ROOT/qa/iyzico-sandbox-probe-latest.json"
printf '%s\n' "$RESP" | "$PHP_BIN" -r '
  $j = json_decode(stream_get_contents(STDIN), true);
  file_put_contents(getenv("PROBE_REPORT"), json_encode($j, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
  if (!is_array($j) || empty($j["ok"])) { fwrite(STDERR, "[FAIL] checkout_create: ".($j["error"]??"unknown")."\n"); exit(1); }
  if (empty($j["checkout_url"])) { fwrite(STDERR, "[FAIL] checkout_url null — iyzico init başarısız (log/Railway env)\n"); exit(1); }
  echo "[OK] checkout_url üretildi\n";
  echo "     order: ".($j["order_number"]??"?")."\n";
  echo "     url: ".substr((string)$j["checkout_url"], 0, 80)."...\n";
' PROBE_REPORT="$PROBE_REPORT" || FAIL=1

echo "Rapor: $PROBE_REPORT"

if [[ "$FAIL" -ne 0 ]]; then
  exit 1
fi

echo ""
echo "Sonraki adım: checkout_url'i tarayıcıda aç → sandbox kartı ile öde."
exit 0
