#!/usr/bin/env python3
"""W22 야외 직행 fresh E2E — 새 프로젝트 생성 + 생성 직후 철제 계단 정정 PUT.

e2e_v16corr_create.py 패턴 복제 (STATE=e2e_w22c_state.json, 커밋 금지).
"""
import json
from pathlib import Path

import requests

BASE = "http://localhost:8000"
ROOT = Path("/Users/manta/Documents/Projects/TheRoad-I1")
PLANNING_PDF = ROOT / "org" / "금월도_기획안_202603.pdf"
EP1_PDF = ROOT / "org" / "금월도 1부_260226(최종수정본).pdf"
STATE = ROOT / "scratchpad" / "e2e_w22c_state.json"

CORRECTIONS = {
    "corrections": [
        {
            "id": "steel-retrofit-stair",
            "text": (
                "옥탑으로 오르는 외부 계단은 건물 외벽에 나중에 덧붙인 철제 증축 "
                "계단이다 — 오픈 발판, 얇은 강판 스트링거와 지지 기둥, 파이프 난간. "
                "콘크리트/시멘트 계단이 아니다."
            ),
            "active": True,
        }
    ]
}

s = requests.Session()

r = s.post(f"{BASE}/api/v1/auth/login",
           json={"username": "admin", "password": "admin123"}, timeout=30)
r.raise_for_status()
print("[login] ok", flush=True)

r = s.post(f"{BASE}/api/v1/projects/", json={
    "name": "금월도 E2E W22 3회차 수정반영 20260710",
    "description": "W22 3회차 — GPT-5.6(Luna 폐지)+결함 5클래스 fix 반영 fresh E2E (이미지 포함 전체)",
}, timeout=60)
r.raise_for_status()
pid = r.json()["id"]
print(f"[project] {pid}", flush=True)

r = s.put(f"{BASE}/api/v1/projects/{pid}/creator-corrections",
          json=CORRECTIONS, timeout=30)
r.raise_for_status()
print(f"[corrections] {json.dumps(r.json(), ensure_ascii=False)[:300]}", flush=True)

with open(PLANNING_PDF, "rb") as f:
    r = s.post(f"{BASE}/api/v1/projects/{pid}/planning-doc",
               files={"file": (PLANNING_PDF.name, f, "application/pdf")},
               timeout=300)
r.raise_for_status()
print(f"[planning-doc] ok ({r.status_code})", flush=True)

with open(EP1_PDF, "rb") as f:
    r = s.post(
        f"{BASE}/api/v1/projects/{pid}/episodes/",
        data={"episode_number": "1", "title": "금월도 1부"},
        files={"file": (EP1_PDF.name, f, "application/pdf")},
        timeout=300,
    )
r.raise_for_status()
eid = r.json()["id"]
print(f"[episode] {eid}", flush=True)

STATE.write_text(json.dumps({"project_id": pid, "episode_id": eid}))
print(f"[state] saved → {STATE}", flush=True)

# 정정 저장 검증 (GET round-trip)
r = s.get(f"{BASE}/api/v1/projects/{pid}/creator-corrections", timeout=30)
r.raise_for_status()
body = r.json()
print(f"[corrections-verify] {json.dumps(body, ensure_ascii=False)[:400]}",
      flush=True)
corr = (body.get("corrections") or [])
assert corr and corr[0]["id"] == "steel-retrofit-stair" and corr[0]["active"], \
    "correction round-trip FAILED"
assert "철제 증축" in corr[0]["text"], "correction text mismatch"
print("[corrections-verify] round-trip PASS", flush=True)
