from pathlib import Path

from autoshorts.keyframe_package import build_keyframe_requests, write_keyframe_package
from autoshorts.keyframe_prompt import build_i2v_prompt_plan
from autoshorts.mechanism_pipeline import build_mechanism_shot_plan
from autoshorts.retention_studio import PILOT_IDEAS, build_mechanism_explainer


def _prompt_plan():
    explainer = build_mechanism_explainer(PILOT_IDEAS[0])
    shot_plan = build_mechanism_shot_plan(explainer)
    return build_i2v_prompt_plan(shot_plan)


def test_keyframe_requests_include_target_paths_and_quality_checklist():
    package = build_keyframe_requests(_prompt_plan(), keyframe_root=Path("data/keyframes"))

    assert package["schema_version"] == "keyframe_requests.v1"
    assert package["video"]["title"] == "Warum ein billiges Auto teuer sein kann"
    assert len(package["requests"]) == 2
    first = package["requests"][0]
    assert first["scene_id"] == "scene_01"
    assert first["target_path"] == "data/keyframes/hidden-money-systems-warum-ein-billiges-auto-teuer-sein-kann/scene_01.png"
    assert first["generator_prompt"].startswith("Photorealistic vertical image")
    assert "No text" in first["generator_prompt"]
    assert "no readable text/logos/license plates" in first["acceptance_checklist"]
    assert first["required_format"] == {"width": 416, "height": 736, "format": "png"}


def test_keyframe_package_explains_fps_policy_for_smooth_final_output():
    package = build_keyframe_requests(_prompt_plan(), keyframe_root=Path("data/keyframes"))

    assert package["fps_policy"]["generation_fps"] == 12
    assert package["fps_policy"]["generation_frames"] == 61
    assert package["fps_policy"]["final_delivery_fps"] == 24
    assert package["fps_policy"]["interpolation"] == "renderer_or_ffmpeg_optical_flow_to_24fps"


def test_write_keyframe_package_outputs_json(tmp_path):
    path = write_keyframe_package(
        _prompt_plan(),
        output_file=tmp_path / "keyframes.json",
        keyframe_root=Path("data/keyframes"),
    )

    text = path.read_text(encoding="utf-8")
    assert "keyframe_requests.v1" in text
    assert "scene_01.png" in text
    assert "ChatGPT Pro" in text
