#!/usr/bin/env python3
"""WHISPER v2 dataset → dockaiq storyboard 제출.

generate.py 의 ITEMS 31개를 storyboard items 로 변환.
preset: qwen-edit-spark-production (i2i + v1 LoRA · 1.33MP · spark)
videos: [] (이미지만 생성, 영상 X)
"""
from __future__ import annotations
import json, sys, urllib.request
from pathlib import Path

# generate.py 모듈 import (ITEMS, build_prompt, build_caption)
sys.path.insert(0, str(Path(__file__).parent))
from generate import ITEMS, build_prompt, build_caption, FACE, TRIGGER

DOCKAIQ = "http://100.92.197.73:9100"
LORA_FILE = "whisper_whsp_qwen2512_v1.safetensors"
ALIAS = "whisper"

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",
    )
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())

# items 빌드: image_prompt = generate.py의 build_prompt 출력 그대로
items = []
for stem, comp, _size, expr, scene, tail in ITEMS:
    prompt = build_prompt(comp, expr, scene)
    items.append({
        "image_prompt": prompt,
        "person_alias": ALIAS,
        "videos": [],
    })

body = {
    "name": "WHISPER v2 dataset 1080p (i2i + v1 LoRA)",
    "preset": "qwen-edit-spark-production",
    "aspect": "3:4",
    "lora": LORA_FILE,
    "priority": "normal",
    "persons": [{"alias": ALIAS, "image_path": str(FACE)}],
    "items": items,
}

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

sb_id = res.get("sb_id") or res.get("id")
if not sb_id:
    print("FATAL: storyboard id 못 받음", file=sys.stderr)
    sys.exit(1)

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