#!/usr/bin/env bash
# سناریوی سرتاسری: اثبات اینکه قانون ۱۰ روزه از مسیر واقعی HTTP قابل دور زدن نیست.
# همه درخواست‌ها از پراکسی Next عبور می‌کنند تا کوکی نشست و CSRF هم سنجیده شوند.
set -euo pipefail

BASE="${BASE:-http://localhost:3000}"
JAR="$(mktemp)"
trap 'rm -f "$JAR"' EXIT

fail() { echo "✗ $1"; exit 1; }
pass() { echo "✓ $1"; }

echo "→ ورود سردبیر"
code=$(curl -s -o /dev/null -w '%{http_code}' -c "$JAR" -X POST "$BASE/api/auth/login" \
  -H 'content-type: application/json' \
  -d '{"email":"chief@shahrnama.local","password":"Shahrnama@1404"}')
[ "$code" = "200" ] || fail "ورود ناموفق (HTTP $code)"
pass "ورود موفق"

CSRF=$(awk '/shahrnama_csrf/ {print $7}' "$JAR")
[ -n "$CSRF" ] || fail "توکن CSRF ساخته نشد"
pass "توکن CSRF دریافت شد"

echo "→ یافتن یک خبر قفل‌شده"
ID=$(curl -s -b "$JAR" "$BASE/api/editorial/articles" \
  | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const i=JSON.parse(s).items.find(a=>a.isLocked);process.stdout.write(i?i.id:"")})')
[ -n "$ID" ] || fail "خبر قفل‌شده‌ای در داده نمونه یافت نشد"
pass "خبر قفل‌شده: $ID"

echo "→ تلاش برای ویرایش بی‌صدا"
code=$(curl -s -o /dev/null -w '%{http_code}' -b "$JAR" -X PATCH "$BASE/api/editorial/articles/$ID" \
  -H 'content-type: application/json' -H "x-csrf-token: $CSRF" -d '{"title":"تغییر غیرمجاز"}')
[ "$code" = "423" ] || fail "ویرایش باید 423 برگرداند، برگرداند $code"
pass "ویرایش مسدود شد (423)"

echo "→ تلاش برای حذف و بازسازی"
code=$(curl -s -o /dev/null -w '%{http_code}' -b "$JAR" -X DELETE "$BASE/api/editorial/articles/$ID" \
  -H "x-csrf-token: $CSRF")
[ "$code" = "423" ] || fail "حذف باید 423 برگرداند، برگرداند $code"
pass "حذف مسدود شد (423)"

echo "→ اصلاحیه بدون دلیل"
code=$(curl -s -o /dev/null -w '%{http_code}' -b "$JAR" -X POST "$BASE/api/editorial/articles/$ID/corrections" \
  -H 'content-type: application/json' -H "x-csrf-token: $CSRF" -d '{"title":"بدون دلیل"}')
[ "$code" = "422" ] || fail "اصلاحیه بدون دلیل باید 422 برگرداند، برگرداند $code"
pass "اصلاحیه بدون دلیل رد شد (422)"

echo "→ اصلاحیه معتبر"
code=$(curl -s -o /dev/null -w '%{http_code}' -b "$JAR" -X POST "$BASE/api/editorial/articles/$ID/corrections" \
  -H 'content-type: application/json' -H "x-csrf-token: $CSRF" \
  -d '{"reason":"تصحیح عدد نادرست در متن","note":"عدد اعلام‌شده اصلاح شد."}')
[ "$code" = "200" ] || fail "اصلاحیه معتبر باید 200 برگرداند، برگرداند $code"
pass "اصلاحیه رسمی ثبت شد"

echo
echo "همه سنجه‌ها موفق: آرشیو تغییرناپذیر از مسیر HTTP قابل دور زدن نیست."
