from autoshorts.retention_studio import (
    PILOT_IDEAS,
    build_mechanism_explainer,
    build_retention_studio_strategy,
    score_idea,
)


def test_strategy_positions_channel_as_retention_studio_not_ai_video_factory():
    strategy = build_retention_studio_strategy()

    assert strategy["positioning"] == "Hidden Money & AI Systems"
    assert strategy["operating_model"] == "semi_automatic_retention_studio"
    assert strategy["not_a"] == ["ki_avatar_news", "static_ai_slideshow", "reused_content_clone"]
    assert "mechanism_reveal" in strategy["format_taxonomy"]
    assert strategy["quality_gates"]["static_card_limit"] == 0
    assert strategy["quality_gates"]["human_review_percent"] == 20


def test_mechanism_explainer_has_required_retention_beats_and_visual_motion():
    idea = PILOT_IDEAS[0]

    explainer = build_mechanism_explainer(idea)

    assert explainer["series"] == "Unsichtbare Systeme in 30 Sekunden"
    assert [beat["beat"] for beat in explainer["beats"]] == [
        "pattern_interrupt",
        "problem",
        "mechanism",
        "twist",
        "follow_trigger",
    ]
    assert explainer["beats"][0]["start"] == 0.0
    assert explainer["beats"][0]["end"] <= 1.5
    assert all(beat["visual_motion"] for beat in explainer["beats"])
    assert all(beat["sound_cue"] for beat in explainer["beats"])
    assert "Follow" not in explainer["follow_trigger"]
    assert "versteckte" in explainer["follow_trigger"].lower()


def test_idea_scoring_rewards_visual_mechanism_and_monetization():
    strong = score_idea(PILOT_IDEAS[0])
    weak = score_idea(
        {
            "title": "What if AI ruled the world",
            "pillar": "general_mystery_history",
            "visual_mechanism": "generic montage",
            "surprise": 4,
            "data_basis": 1,
            "comment_potential": 3,
            "series_potential": 2,
            "monetization_potential": 2,
            "production_effort": 8,
        }
    )

    assert strong["total"] >= 80
    assert strong["decision"] == "produce"
    assert weak["total"] < 60
    assert weak["decision"] == "reject"


def test_pilot_ideas_cover_money_ai_swiss_and_cognitive_systems():
    pillars = {idea["pillar"] for idea in PILOT_IDEAS}

    assert "hidden_money_systems" in pillars
    assert "ai_agents_explained" in pillars
    assert "swiss_systems_explained" in pillars
    assert "dangerous_thinking_errors" in pillars
    assert len(PILOT_IDEAS) == 10
