from pathlib import Path

from autoshorts.growth_plan import load_testbatch
from autoshorts.voiceover_finalizer import finalize_voiceover, write_final_scripts


def test_finalize_voiceover_keeps_hook_first_and_estimates_duration():
    batch = load_testbatch(Path("data/drafts/testbatch_002.json"))
    idea = next(item for item in batch["ideas"] if item["id"] == "ai-004")

    final = finalize_voiceover(idea)

    assert final["id"] == "ai-004"
    assert final["voiceover"].startswith(idea["hook"])
    assert final["estimated_seconds"] <= idea["duration_seconds"] + 4
    assert final["estimated_seconds"] >= idea["duration_seconds"] - 12
    assert final["word_count"] > 70
    assert final["caption_beats"][0]["start"] == 0
    assert final["production_notes"]


def test_finalize_voiceover_uses_longer_script_for_rewards_candidate():
    batch = load_testbatch(Path("data/drafts/testbatch_002.json"))
    idea = next(item for item in batch["ideas"] if item["id"] == "ai-005")

    final = finalize_voiceover(idea)

    assert final["platform_note"] == "TikTok Rewards Candidate"
    assert final["word_count"] >= 120
    assert final["estimated_seconds"] >= 60
    assert "comment" in final["voiceover"].lower()


def test_write_final_scripts_only_writes_selected_ids(tmp_path):
    batch = load_testbatch(Path("data/drafts/testbatch_002.json"))

    paths = write_final_scripts(batch, tmp_path, selected_ids=["ai-004", "ai-005", "attention-002"])

    assert len(paths) == 3
    names = {path.name for path in paths}
    assert any(name.startswith("ai-004") for name in names)
    assert all(path.suffix == ".md" for path in paths)
    assert "Voiceover" in paths[0].read_text(encoding="utf-8")
