#!/usr/bin/env python3
import json
import subprocess
from pathlib import Path

ROOT = Path("/data/video-pipeline/GacMaiAudio/project/gacmai_20260713_050144")


def duration(path: Path) -> float:
    output = subprocess.check_output([
        "ffprobe", "-v", "error", "-show_entries", "format=duration",
        "-of", "default=nw=1:nk=1", str(path),
    ], text=True)
    return float(output)


final_duration = duration(ROOT / "assets/audio/narration_final.wav")
intro_duration = duration(ROOT / "assets/audio/chunks/chunk_0000.wav")
poster_duration = (intro_duration + 2.0) / 1.1
scene_duration = (final_duration - poster_duration) / 96

lines = [
    f"file {ROOT / 'assets/images/poster.png'}",
    f"duration {poster_duration:.6f}",
]
for index in range(1, 97):
    image = ROOT / f"assets/images/scene_{index:03d}.png"
    lines.extend([f"file {image}", f"duration {scene_duration:.6f}"])
lines.append(f"file {ROOT / 'assets/images/scene_096.png'}")
(ROOT / "render/timeline.txt").write_text("\n".join(lines) + "\n")

manifest = {
    "audio_duration": final_duration,
    "intro_raw_duration": intro_duration,
    "poster_duration": poster_duration,
    "story_scene_duration": scene_duration,
    "poster_additional": True,
    "story_scenes": 96,
    "resolution": "1920x1080",
    "fps": 24,
}
(ROOT / "artifacts/render_timeline.json").write_text(
    json.dumps(manifest, ensure_ascii=False, indent=2)
)
status_path = ROOT / "status.json"
status = json.loads(status_path.read_text())
status.update({"stage": "render", "state": "in_progress", "audio_duration": final_duration})
status_path.write_text(json.dumps(status, ensure_ascii=False, indent=2))
print(json.dumps(manifest, ensure_ascii=False))
