from autoshorts.rendering.visual_proof_policy import (
    VisualProofCandidate,
    VisualProofKind,
    evaluate_visual_proof_candidate,
)


def test_prompt_only_generation_blocks_content_visual_proof():
    candidate = VisualProofCandidate(
        kind=VisualProofKind.WAN_VIDEO,
        prompt_only_generation=True,
        has_start_frame=False,
        has_valid_wan_output=True,
    )

    result = evaluate_visual_proof_candidate(candidate)

    assert result.allowed is False
    assert "prompt_only_generation_blocked" in result.reasons


def test_animatic_cannot_replace_failed_wan_proof():
    candidate = VisualProofCandidate(
        kind=VisualProofKind.ANIMATIC,
        prompt_only_generation=False,
        has_start_frame=True,
        has_valid_wan_output=False,
    )

    result = evaluate_visual_proof_candidate(candidate)

    assert result.allowed is False
    assert "animatic_not_valid_visual_proof" in result.reasons


def test_i2v_with_start_frame_and_valid_wan_output_is_allowed():
    candidate = VisualProofCandidate(
        kind=VisualProofKind.WAN_VIDEO,
        prompt_only_generation=False,
        has_start_frame=True,
        has_valid_wan_output=True,
    )

    result = evaluate_visual_proof_candidate(candidate)

    assert result.allowed is True
    assert result.reasons == ()


def test_full_final_requires_accepted_scene_proofs_or_keyframes():
    candidate = VisualProofCandidate(
        kind=VisualProofKind.FULL_FINAL,
        prompt_only_generation=False,
        has_start_frame=True,
        has_valid_wan_output=True,
        accepted_scene_proof=False,
        accepted_keyframes=False,
    )

    result = evaluate_visual_proof_candidate(candidate)

    assert result.allowed is False
    assert "full_final_requires_accepted_scene_proof_or_keyframes" in result.reasons
