import json
from pathlib import Path

from autoshorts.local_motion_renderer import _caption_layout, local_render_jobs, render_local_motion_video


FIXTURE = Path("data/free_production_jobs/mechanism_pilots/hidden-money-systems-warum-ein-billiges-auto-teuer-sein-kann.json")


def _jobs() -> dict:
    return json.loads(FIXTURE.read_text(encoding="utf-8"))


def test_caption_layout_keeps_long_german_lines_inside_safe_area():
    layout = _caption_layout(
        "Röntgenblick durch Preis, Reparaturrisiko, Standtage, Händler-Marge und Liquidität.",
        width=180,
        height=320,
        pulse=0.7,
    )

    assert layout["box"][0] >= 0
    assert layout["box"][2] <= 180
    assert max(line["width"] for line in layout["lines"]) <= layout["text_max_width"]
    assert len(layout["lines"]) <= 4


def test_local_render_jobs_filters_out_text_only_nvidia_refinement_jobs():
    jobs = _jobs()

    render_jobs = local_render_jobs(jobs)

    assert len(render_jobs) == 5
    assert {job["provider"] for job in render_jobs} <= {"local_renderer", "local_ffmpeg"}
    assert all(job["cost"] == "free" for job in render_jobs)
    assert all(job["provider"] != "free_nvidia_llm" for job in render_jobs)


def test_render_local_motion_video_writes_vertical_mp4_and_metadata(tmp_path):
    jobs = _jobs()
    output_path = tmp_path / "pilot.mp4"

    result = render_local_motion_video(jobs, output_path, width=180, height=320, fps=4)

    assert output_path.exists()
    assert output_path.stat().st_size > 0
    assert result["output_path"] == output_path
    assert result["video_id"] == "hidden-money-systems-warum-ein-billiges-auto-teuer-sein-kann"
    assert result["scene_count"] == 5
    assert result["width"] == 180
    assert result["height"] == 320
    assert result["fps"] == 4
    assert result["paid_credit_providers_used"] == []
    assert result["rendered_duration_seconds"] == sum(job["duration_seconds"] for job in local_render_jobs(jobs))
    assert result["motion_event_count"] >= result["scene_count"] * 2
    assert result["metadata_path"].exists()

    metadata = json.loads(result["metadata_path"].read_text(encoding="utf-8"))
    assert metadata["schema_version"] == "local_motion_render.v1"
    assert metadata["budget_policy"]["paid_video_credits_allowed"] is False
    assert metadata["scene_count"] == 5
