"""Minimal manual claim gate for V2 candidates."""

from __future__ import annotations

from dataclasses import dataclass
from enum import StrEnum
from typing import Any

from autoshorts.ideas.candidate import ValidationResult
from autoshorts.strategy.spine_v2 import ClaimRisk, VideoCandidateV2, _is_blank


class ClaimType(StrEnum):
    OPINION = "opinion"
    EXPERIENCE = "experience"
    SOURCED_FACT = "sourced_fact"
    RISKY_CLAIM = "risky_claim"


@dataclass(frozen=True)
class Claim:
    text: str
    claim_type: ClaimType
    source: str = ""
    risk: ClaimRisk = ClaimRisk.LOW
    note: str = ""


def validate_claims_for_candidate(candidate: VideoCandidateV2) -> ValidationResult:
    errors: list[str] = []
    claims: tuple[Any, ...] = candidate.claims
    if not claims:
        errors.append("claims are required")
    for claim in claims:
        if isinstance(claim, str):
            continue
        text = getattr(claim, "text", "")
        claim_type = getattr(claim, "claim_type", None)
        source = getattr(claim, "source", "")
        risk = getattr(claim, "risk", ClaimRisk.LOW)
        if _is_blank(text):
            errors.append("claim text is required")
        if claim_type == ClaimType.EXPERIENCE and _is_blank(candidate.human_texture_note):
            errors.append("experience claim requires human_texture_note")
        if claim_type == ClaimType.SOURCED_FACT and _is_blank(source):
            errors.append("source is required for sourced_fact")
        if claim_type == ClaimType.RISKY_CLAIM and _is_blank(source):
            errors.append("source is required for risky_claim")
        if risk == ClaimRisk.HIGH and _is_blank(source):
            errors.append("high risk claim requires source")
    return ValidationResult(is_valid=not errors, errors=tuple(dict.fromkeys(errors)))
