"""Render the deterministic local MP4 timing preview demo."""

from __future__ import annotations

import argparse
import sys
from collections.abc import Sequence
from pathlib import Path
from typing import TextIO

from autoshorts.content.brief import create_content_brief
from autoshorts.content.script_draft import create_script_draft
from autoshorts.rendering.ffmpeg_plan import build_ffmpeg_concat_plan
from autoshorts.rendering.ffmpeg_renderer import render_ffmpeg_preview_video
from autoshorts.rendering.local_frame_writer import write_local_preview_frames
from autoshorts.rendering.local_preview import build_local_preview_plan
from autoshorts.rendering.manifest import build_render_manifest
from autoshorts.rendering.shot_plan import create_shot_plan


def _parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(description="Render deterministic AutoShorts local preview MP4.")
    parser.add_argument(
        "--out-dir",
        default="data/previews/demo-local-preview",
        help="Directory for PNG frames, concat file, and preview MP4.",
    )
    parser.add_argument(
        "--approval-language",
        default="de",
        choices=("de", "en"),
        help="Language for approval-preview frame text. Final videos can use English later.",
    )
    return parser


def _build_preview_video(output_dir: Path, *, approval_language: str):
    brief = create_content_brief(
        pillar_id="ai_life_systems",
        topic="AI weekly review routine",
        audience_problem="I use AI tools but still lose control of priorities.",
        payoff="a 10-minute Sunday review that keeps AI as assistant, not boss",
    )
    script = create_script_draft(brief)
    shot_plan = create_shot_plan(script)
    manifest = build_render_manifest(shot_plan)
    preview_plan = build_local_preview_plan(manifest)
    frame_result = write_local_preview_frames(
        preview_plan,
        output_dir=output_dir / "frames",
        approval_language=approval_language,
    )
    concat_plan = build_ffmpeg_concat_plan(preview_plan, frame_result, output_path=output_dir / "preview.mp4")
    render_result = render_ffmpeg_preview_video(concat_plan)
    return preview_plan, frame_result, render_result


def main(argv: Sequence[str] | None = None, *, stdout: TextIO | None = None) -> int:
    """Render demo PNG frames and MP4 timing preview, then print metadata."""

    args = _parser().parse_args(argv)
    output = stdout or sys.stdout
    output_dir = Path(args.out_dir)
    preview_plan, frame_result, render_result = _build_preview_video(
        output_dir,
        approval_language=args.approval_language,
    )

    print(f"Script: {render_result.script_id}", file=output)
    print(f"Preview video: {render_result.output_path}", file=output)
    print(f"Concat file: {render_result.concat_file_path}", file=output)
    print(f"Frame count: {len(frame_result.frame_paths)}", file=output)
    print(f"Approval language: {args.approval_language}", file=output)
    print(f"Preview format: {preview_plan.width}x{preview_plan.height} @ {preview_plan.fps}fps", file=output)
    print(f"Frame side effects: {', '.join(frame_result.side_effects)}", file=output)
    print(f"Side effects: {', '.join(render_result.side_effects)}", file=output)
    print(f"External calls: {', '.join(render_result.external_calls)}", file=output)
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
