"""Minimal AI-disclosure review model for pre-render gates."""

from __future__ import annotations

from dataclasses import dataclass
from enum import StrEnum

from autoshorts.ideas.candidate import ValidationResult


class DisclosureValue(StrEnum):
    YES = "yes"
    NO = "no"
    UNCLEAR = "unclear"


class SyntheticMediaType(StrEnum):
    NONE = "none"
    TEXT_ONLY_ASSISTANCE = "text_only_assistance"
    ABSTRACT_BACKGROUND = "abstract_background"
    REALISTIC_PERSON = "realistic_person"
    REALISTIC_EVENT = "realistic_event"
    REALISTIC_VOICE = "realistic_voice"
    UNCLEAR = "unclear"


@dataclass(frozen=True)
class AIDisclosureReview:
    youtube: DisclosureValue
    tiktok: DisclosureValue
    instagram: DisclosureValue
    linkedin: DisclosureValue
    reason: str
    synthetic_media_type: SyntheticMediaType
    manual_review_required: bool = False

    @classmethod
    def text_only_assistance(cls, reason: str) -> "AIDisclosureReview":
        return cls(
            youtube=DisclosureValue.NO,
            tiktok=DisclosureValue.NO,
            instagram=DisclosureValue.NO,
            linkedin=DisclosureValue.NO,
            reason=reason,
            synthetic_media_type=SyntheticMediaType.TEXT_ONLY_ASSISTANCE,
            manual_review_required=False,
        )


def validate_ai_disclosure_review(review: AIDisclosureReview) -> ValidationResult:
    errors: list[str] = []
    if DisclosureValue.UNCLEAR in (review.youtube, review.tiktok, review.instagram, review.linkedin):
        errors.append("unclear disclosure blocks rendering")
    if review.synthetic_media_type == SyntheticMediaType.UNCLEAR:
        errors.append("unclear synthetic media type blocks rendering")
    if review.synthetic_media_type in {
        SyntheticMediaType.REALISTIC_PERSON,
        SyntheticMediaType.REALISTIC_EVENT,
        SyntheticMediaType.REALISTIC_VOICE,
    } and not review.manual_review_required:
        errors.append("realistic synthetic media requires manual_review_required")
    if not (review.reason or "").strip():
        errors.append("disclosure reason is required")
    return ValidationResult(is_valid=not errors, errors=tuple(dict.fromkeys(errors)))
