import pytest

from autoshorts.content.brief import create_content_brief
from autoshorts.content.script_draft import (
    ScriptDraft,
    create_script_draft,
    validate_script_draft,
)


def _brief():
    return 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",
    )


def test_create_script_draft_from_content_brief():
    draft = create_script_draft(_brief())

    assert isinstance(draft, ScriptDraft)
    assert draft.brief_id == "ai_life_systems-ai-weekly-review-routine"
    assert draft.title == "AI weekly review routine"
    assert draft.hook == "If AI runs your week, you have already lost control."
    assert len(draft.retention_beats) == 4
    assert draft.retention_beats[0].startswith("Show the messy")
    assert "human approval checkpoint" in draft.visual_concept
    assert "10-minute Sunday review" in draft.script_outline
    assert draft.caption == "Keep AI useful by keeping the final decision human."
    assert draft.cta == "Comment REVIEW if you want the weekly checklist."
    assert draft.estimated_duration_seconds == 35
    assert "AI slop" not in draft.script_outline


def test_validate_script_draft_accepts_retention_led_draft():
    result = validate_script_draft(create_script_draft(_brief()))

    assert result.is_valid is True
    assert result.errors == ()


def test_validate_script_draft_rejects_missing_core_fields():
    draft = ScriptDraft(
        brief_id="brief",
        title=" ",
        hook="",
        script_outline=" ",
        retention_beats=("beat 1", "beat 2", "beat 3"),
        visual_concept="",
        caption=" ",
        cta="",
        estimated_duration_seconds=35,
    )

    result = validate_script_draft(draft)

    assert result.is_valid is False
    assert "title is required" in result.errors
    assert "hook is required" in result.errors
    assert "script_outline is required" in result.errors
    assert "visual_concept is required" in result.errors
    assert "caption is required" in result.errors
    assert "cta is required" in result.errors


def test_validate_script_draft_enforces_retention_beats_and_duration():
    draft = create_script_draft(_brief(), retention_beats=("only", "two"), estimated_duration_seconds=181)

    result = validate_script_draft(draft)

    assert result.is_valid is False
    assert "retention_beats must contain 3 to 5 beats" in result.errors
    assert "duration_seconds must be between 10 and 180" in result.errors


def test_validate_script_draft_rejects_generic_ai_slop_language():
    draft = create_script_draft(
        _brief(),
        script_outline="In this video, we explore productivity tips and unlock your full potential.",
    )

    result = validate_script_draft(draft)

    assert result.is_valid is False
    assert "generic AI-slop phrase: in this video" in result.errors
    assert "generic AI-slop phrase: unlock your full potential" in result.errors
