#!/usr/bin/env python3
"""RINA v1 dataset → dockaiq storyboard 제출. 첫 학습 (LoRA 없음)."""
from __future__ import annotations
import json, sys, urllib.request, urllib.error
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent))
from generate import ITEMS, build_prompt, FACE, TRIGGER

DOCKAIQ = "http://100.92.197.73:9100"
ALIAS = "rina"
PRESET = "qwenedit-ltx-production"


def post(path: str, body: dict) -> dict:
    req = urllib.request.Request(
        f"{DOCKAIQ}{path}",
        data=json.dumps(body).encode(),
        headers={"Content-Type": "application/json"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        body = e.read().decode("utf-8", errors="replace")
        print(f"HTTP {e.code} on {path}:\n{body}", file=sys.stderr)
        raise


items = []
for stem, comp, _size, expr, scene, tail in ITEMS:
    items.append({
        "image_prompt": build_prompt(comp, expr, scene),
        "person_alias": ALIAS,
        "videos": [],
    })

body = {
    "name": "RINA v1 dataset 1080p (i2i, no LoRA · first training)",
    "preset": PRESET,
    "aspect": "3:4",
    "priority": "normal",
    "persons": [{"alias": ALIAS, "image_path": str(FACE)}],
    "items": items,
}

if not FACE.exists():
    sys.exit(f"FATAL: face_sheet 없음 — {FACE}")

print(f"creating storyboard · preset={PRESET} · {len(items)} items · no LoRA")
res = post("/api/storyboards", body)
print(json.dumps(res, ensure_ascii=False, indent=2))

sb_id = res.get("storyboard_id") or res.get("sb_id") or res.get("id")
if not sb_id:
    sys.exit(f"FATAL: storyboard id 못 받음 — {res}")

print(f"\nproducing storyboard #{sb_id} ...")
prod = post(f"/api/storyboards/{sb_id}/produce", {})
print(json.dumps(prod, ensure_ascii=False, indent=2))
