"""W-E canary: outdoor_site_layout force 재실행 + 폴링 (E2E b0ad5c18)."""
import sys, time
import requests

BASE = "http://localhost:8000"
PID = "b0ad5c18-5140-4022-a2b0-805de0e5a385"
EID = "0d30302a-51c8-4ac9-98e2-6cd9180512bf"
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/{PID}/episodes/{EID}/steps/outdoor_site_layout", params={"mode": "force"}, timeout=60)
print("[force]", r.status_code, r.text[:300], flush=True)
r.raise_for_status()

for i in range(240):  # 최대 40분
    time.sleep(10)
    r = s.get(f"{BASE}/api/v1/projects/{PID}/episodes/{EID}/steps/", timeout=30)
    try:
        steps = r.json()
        st = next((x for x in steps if x.get("step_id") == "outdoor_site_layout"), None)
        status = (st or {}).get("status")
    except Exception as e:
        status = f"ERR {e}"
    print(f"[poll {i}] {status}", flush=True)
    if status in ("completed", "failed", "partial"):
        print("[done]", status, flush=True)
        sys.exit(0 if status == "completed" else 1)
print("[timeout]", flush=True)
sys.exit(2)
