#!/usr/bin/env python3
"""Test H3 hybrid mode (i2va + refImages) for Case01."""
import requests, json, os, time

case_dir = "/home/kai/文档/LTX/validition_v1/case01"
files = sorted([f for f in os.listdir(case_dir) if f.endswith((".png", ".jpg", ".webp"))])
print(f"Case01 images: {files}")

first_frame = os.path.join(case_dir, files[0])
ref_imgs = [os.path.join(case_dir, files[i]) for i in range(1, min(len(files), 4))]
print(f"First frame: {files[0]}")
print(f"Ref images: {[os.path.basename(r) for r in ref_imgs]}")

url = "http://localhost:10588/api/production/minimax-h3/generate"
data = {
    "mode": "i2va",
    "prompt": "A cinematic shot of a woman in a dark elegant dress walking through a dimly lit gothic corridor, dramatic lighting, atmospheric fog, film grain",
    "width": "960",
    "height": "512",
    "length": "81",
    "steps": "4",
    "turbo": "true",
}

files_dict = {}
files_dict["image"] = open(first_frame, "rb")
for r in ref_imgs:
    files_dict["refImages"] = open(r, "rb")

print("\nSubmitting hybrid (i2va + refImages)...")
resp = requests.post(url, data=data, files=files_dict)
print(f"Status: {resp.status_code}")
r = resp.json()
print(json.dumps(r, indent=2)[:500])

pid = r.get("promptId")
if not pid:
    print("No promptId, exiting")
    exit(1)

print(f"\npromptId: {pid}")
for attempt in range(60):
    time.sleep(5)
    s = requests.get(f"http://localhost:8188/history/{pid}").json()
    if pid in s:
        outputs = s[pid].get("outputs", {})
        status = s[pid].get("status", {})
        if status.get("completed"):
            for nid, out in outputs.items():
                if "gifs" in out:
                    fname = out["gifs"][0]["filename"]
                    subfolder = out["gifs"][0].get("subfolder", "")
                    print(f"DONE! Output: {fname} (subfolder={subfolder})")
                elif "images" in out:
                    fname = out["images"][0]["filename"]
                    subfolder = out["images"][0].get("subfolder", "")
                    print(f"DONE! Output: {fname} (subfolder={subfolder})")
            break
        elif status.get("status_str") == "error":
            msgs = status.get("messages", "unknown")
            print(f"ERROR: {msgs}")
            # 也看 /history 里的完整信息
            for nid, out in outputs.items():
                print(f"  node {nid}: {out}")
            break
        else:
            print(f"  [{attempt}] still running...")
else:
    print("TIMEOUT after 300s")
