"""Deterministic pre-render quality gate for script candidates."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Literal

PolicyRisk = Literal["low", "medium", "high"]


@dataclass(frozen=True)
class ScriptQualityScore:
    """Human/LLM-reviewable scores for one short-form script candidate.

    Numeric dimensions use a 0-10 scale. ``ai_slop_risk`` is inverse: higher
    means more generic, uncanny, or trust-damaging output risk.
    """

    hook_strength: int
    novelty: int
    clarity: int
    retention: int
    ai_slop_risk: int
    policy_risk: PolicyRisk = "low"

    @property
    def average_quality(self) -> float:
        return (self.hook_strength + self.novelty + self.clarity + self.retention) / 4


def should_render(
    score: ScriptQualityScore,
    *,
    minimum_average: float = 8.0,
    maximum_ai_slop_risk: int = 5,
) -> bool:
    """Return whether a script should proceed to rendering.

    The gate is intentionally conservative: content below threshold waits for
    rewrite instead of spending render time on AI slop. A dreary but economical
    little kindness.
    """

    if score.policy_risk == "high":
        return False
    if score.ai_slop_risk > maximum_ai_slop_risk:
        return False
    return score.average_quality >= minimum_average
