import pytest

from autoshorts.content.brief import create_content_brief
from autoshorts.content.script_draft import create_script_draft
from autoshorts.content.to_candidate import convert_script_draft_to_candidate
from autoshorts.rendering.manifest import build_render_manifest
from autoshorts.rendering.preview import build_html_preview
from autoshorts.rendering.shot_plan import create_shot_plan
from autoshorts.social.draft import SocialMediaDraft, build_social_media_draft
from autoshorts.social.review import render_social_media_draft_review


def _draft():
    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",
    )
    script = create_script_draft(brief)
    candidate = convert_script_draft_to_candidate(brief, script)
    preview = build_html_preview(build_render_manifest(create_shot_plan(script)))
    return build_social_media_draft(candidate, preview)


def test_render_social_media_draft_review_creates_telegram_safe_approval_text():
    review_text = render_social_media_draft_review(_draft())

    assert review_text.startswith("## Social Media Draft Review")
    assert "Candidate: ai_life_systems-ai-weekly-review-routine-35s" in review_text
    assert "Platforms: YouTube Shorts, TikTok, Instagram Reels" in review_text
    assert "Duration: 35s" in review_text
    assert "Hook:" in review_text
    assert "If AI runs your week, you have already lost control." in review_text
    assert "Title variants:" in review_text
    assert "Caption:" in review_text
    assert "Hashtags: #AI #LifeSystems #Productivity" in review_text
    assert "Preview: HTML timeline preview available (html_timeline)" in review_text
    assert "Quality/Risk: Quality average: 8.0; AI-slop risk: 3; Policy risk: low" in review_text
    assert "Requires human approval: yes" in review_text
    assert "Side effects: none" in review_text
    assert "Approval commands:" in review_text
    assert "Freigabe YouTube" in review_text
    assert "Freigabe TikTok" in review_text
    assert "Freigabe Instagram" in review_text
    assert "Freigabe alle" in review_text
    assert "Ablehnen" in review_text
    assert "Ändern: <requested change>" in review_text
    assert len(review_text) <= 4096
    assert "publish" not in review_text.casefold()
    assert "post" not in review_text.casefold()


def test_render_social_media_draft_review_rejects_invalid_draft():
    draft = _draft()
    invalid = SocialMediaDraft(
        candidate_id="",
        platforms=draft.platforms,
        platform_labels=draft.platform_labels,
        title_variants=draft.title_variants,
        caption=draft.caption,
        hashtags=draft.hashtags,
        cta=draft.cta,
        hook=draft.hook,
        planned_duration_seconds=draft.planned_duration_seconds,
        quality_risk_summary=draft.quality_risk_summary,
        preview_reference=draft.preview_reference,
        preview_type=draft.preview_type,
        requires_human_approval=draft.requires_human_approval,
        side_effects=draft.side_effects,
    )

    with pytest.raises(ValueError, match="candidate_id is required"):
        render_social_media_draft_review(invalid)
