from autoshorts.social.final_approval import (
    FinalVideoApprovalPackage,
    build_truetrace_weird_email_final_approval_package,
    render_final_video_approval_review,
    validate_final_video_approval_package,
)


def test_build_truetrace_weird_email_final_approval_package_is_approval_first():
    package = build_truetrace_weird_email_final_approval_package(
        media_path="data/final_exports/truetrace/final.mp4",
        checksum_sha256="2e02b2960b1924abd8bc4154d91f521b370dde52f2af0944b24723c453fd0c6b",
    )

    assert isinstance(package, FinalVideoApprovalPackage)
    assert package.candidate_id == "truetrace-ai-automation-quiet-rot-38s"
    assert package.media_path.endswith("final.mp4")
    assert package.checksum_sha256 == "2e02b2960b1924abd8bc4154d91f521b370dde52f2af0944b24723c453fd0c6b"
    assert package.platforms == ("youtube", "tiktok")
    assert package.platform_labels == ("YouTube Shorts", "TikTok")
    assert package.final_video_language == "en"
    assert package.approval_language == "de"
    assert package.duration_seconds == 37
    assert package.resolution == "1080x1920"
    assert package.requires_human_approval is True
    assert package.side_effects == ()
    assert "weird email" in package.hook.casefold()
    assert "exception path" not in package.caption.casefold()
    assert package.hashtags == ("#AI", "#AISystems", "#Workflow")


def test_render_final_video_approval_review_is_telegram_safe_and_no_action_language():
    package = build_truetrace_weird_email_final_approval_package(
        media_path="data/final_exports/truetrace/final.mp4",
        checksum_sha256="2e02b2960b1924abd8bc4154d91f521b370dde52f2af0944b24723c453fd0c6b",
    )

    text = render_final_video_approval_review(package)

    assert "## Final Video Review" in text
    assert "Freigabe YouTube" in text
    assert "Freigabe TikTok" in text
    assert "Freigabe alle" in text
    assert "Ablehnen" in text
    assert "Ändern:" in text
    assert "data/final_exports/truetrace/final.mp4" in text
    assert package.checksum_sha256 in text
    assert len(text) < 4096
    assert "publish" not in text.casefold()
    assert "post" not in text.casefold()


def test_validate_final_video_approval_package_rejects_unsafe_fields():
    package = FinalVideoApprovalPackage(
        candidate_id="",
        media_path="final.mov",
        checksum_sha256="bad",
        platforms=("linkedin",),
        platform_labels=("LinkedIn",),
        title_variants=(),
        caption="",
        hashtags=(),
        hook="",
        duration_seconds=9,
        resolution="540x960",
        quality_notes="",
        approval_language="en",
        final_video_language="de",
        requires_human_approval=False,
        side_effects=("send_telegram",),
    )

    result = validate_final_video_approval_package(package)

    assert result.is_valid is False
    assert "candidate_id is required" in result.errors
    assert "media_path must end with .mp4" in result.errors
    assert "checksum_sha256 must be a 64-character hex string" in result.errors
    assert "unsupported platform: linkedin" in result.errors
    assert "at least one title variant is required" in result.errors
    assert "caption is required" in result.errors
    assert "human approval is required" in result.errors
    assert "final video approval packages must not have side effects" in result.errors
