from autoshorts.production.resource_gate import RenderApprovalState, ResourceCostTier, evaluate_media_generation_gate
from autoshorts.strategy.spine_v2 import build_demo_candidates_v2, build_review_package_v2


def test_preview_render_approval_allows_deterministic_preview_but_not_wan_or_styleframe():
    candidate = build_demo_candidates_v2(limit=1)[0]
    package = build_review_package_v2(candidate)

    preview = evaluate_media_generation_gate(
        candidate=candidate,
        review_package=package,
        requested_resource_tier=ResourceCostTier.DETERMINISTIC_PREVIEW,
        approval_state=RenderApprovalState.APPROVED_FOR_PREVIEW_RENDER,
        approved_candidate_id=candidate.candidate_id,
        approved_version=candidate.version,
        approved_script_hash=package.script_hash,
    )
    assert preview.allowed

    wan = evaluate_media_generation_gate(
        candidate=candidate,
        review_package=package,
        requested_resource_tier=ResourceCostTier.WAN_FINAL_RENDER,
        approval_state=RenderApprovalState.APPROVED_FOR_PREVIEW_RENDER,
        approved_candidate_id=candidate.candidate_id,
        approved_version=candidate.version,
        approved_script_hash=package.script_hash,
    )
    assert not wan.allowed

    styleframe = evaluate_media_generation_gate(
        candidate=candidate,
        review_package=package,
        requested_resource_tier=ResourceCostTier.AI_STYLEFRAME,
        approval_state=RenderApprovalState.APPROVED_FOR_PREVIEW_RENDER,
        approved_candidate_id=candidate.candidate_id,
        approved_version=candidate.version,
        approved_script_hash=package.script_hash,
    )
    assert not styleframe.allowed
