import pytest

from autoshorts.content.brief import ContentBrief, create_content_brief, validate_content_brief


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

    assert isinstance(brief, ContentBrief)
    assert brief.brief_id == "ai_life_systems-ai-weekly-review-routine"
    assert brief.pillar_id == "ai_life_systems"
    assert brief.topic == "AI weekly review routine"
    assert brief.audience_problem.startswith("I use AI tools")
    assert "10-minute Sunday review" in brief.payoff
    assert "AI as a servant" in brief.positioning
    assert "human remains in control" in brief.visual_rules
    assert "fake earnings" in brief.no_go
    assert brief.target_duration_seconds == 35
    assert brief.platforms == ("youtube", "tiktok", "instagram")


def test_create_content_brief_rejects_unknown_pillar():
    with pytest.raises(ValueError, match="unknown pillar"):
        create_content_brief(
            pillar_id="unknown",
            topic="AI weekly review routine",
            audience_problem="AI tools create noise.",
            payoff="one weekly control checkpoint",
        )


def test_validate_content_brief_rejects_missing_strategy_fields():
    brief = ContentBrief(
        brief_id="bad",
        pillar_id="ai_life_systems",
        topic=" ",
        audience_problem="",
        payoff=" ",
        positioning="AI as a servant for ordinary life systems, never as values or authority.",
        tone=("clear",),
        visual_rules=("human remains in control",),
        no_go=("fake earnings",),
        platforms=("youtube",),
        target_duration_seconds=35,
    )

    result = validate_content_brief(brief)

    assert result.is_valid is False
    assert "topic is required" in result.errors
    assert "audience_problem is required" in result.errors
    assert "payoff is required" in result.errors


def test_validate_content_brief_rejects_bad_duration_and_platforms():
    brief = create_content_brief(
        pillar_id="ai_life_systems",
        topic="AI weekly review routine",
        audience_problem="AI tools create noise.",
        payoff="one weekly control checkpoint",
        platforms=("linkedin",),
        target_duration_seconds=9,
    )

    result = validate_content_brief(brief)

    assert result.is_valid is False
    assert "duration_seconds must be between 10 and 180" in result.errors
    assert "unsupported platform: linkedin" in result.errors
