"""Convert content-development artifacts into video candidates."""

from __future__ import annotations

from autoshorts.config.pillars import DEFAULT_PILLARS, ContentPillar
from autoshorts.content.brief import ContentBrief
from autoshorts.content.script_draft import ScriptDraft, validate_script_draft
from autoshorts.ideas.candidate import VideoCandidate
from autoshorts.ideas.factory import CandidateDraft, create_candidate
from autoshorts.scripting.quality import ScriptQualityScore

_DEFAULT_INITIAL_QUALITY_SCORE = ScriptQualityScore(
    hook_strength=8,
    novelty=8,
    clarity=8,
    retention=8,
    ai_slop_risk=3,
    policy_risk="low",
)

_DEFAULT_HYPOTHESIS = (
    "A human-approval AI routine creates saves because it gives viewers control without hype."
)


def _policy_notes_from_brief(brief: ContentBrief) -> tuple[str, ...]:
    return (
        f"Source brief: {brief.brief_id}",
        "Human approval remains explicit",
        *(f"No-go inherited: {item}" for item in brief.no_go),
    )


def _ensure_script_matches_brief(brief: ContentBrief, script: ScriptDraft) -> None:
    if script.brief_id != brief.brief_id:
        raise ValueError("script draft does not belong to content brief")


def convert_script_draft_to_candidate_draft(
    brief: ContentBrief,
    script: ScriptDraft,
    *,
    quality_score: ScriptQualityScore = _DEFAULT_INITIAL_QUALITY_SCORE,
    hypothesis: str = _DEFAULT_HYPOTHESIS,
) -> CandidateDraft:
    """Translate a script draft into the existing candidate-factory input."""

    _ensure_script_matches_brief(brief, script)
    validation = validate_script_draft(script)
    if not validation.is_valid:
        raise ValueError("; ".join(validation.errors))

    return CandidateDraft(
        pillar=brief.pillar_id,
        title=script.title,
        platforms=brief.platforms,
        duration_seconds=script.estimated_duration_seconds,
        hook=script.hook,
        script_outline=script.script_outline,
        visual_concept=script.visual_concept,
        caption=script.caption,
        cta=script.cta,
        quality_score=quality_score,
        policy_notes=_policy_notes_from_brief(brief),
        hypothesis=hypothesis,
    )


def convert_script_draft_to_candidate(
    brief: ContentBrief,
    script: ScriptDraft,
    *,
    registry: tuple[ContentPillar, ...] = DEFAULT_PILLARS,
    quality_score: ScriptQualityScore = _DEFAULT_INITIAL_QUALITY_SCORE,
    hypothesis: str = _DEFAULT_HYPOTHESIS,
) -> VideoCandidate:
    """Create a validated VideoCandidate from content-development artifacts."""

    candidate_draft = convert_script_draft_to_candidate_draft(
        brief,
        script,
        quality_score=quality_score,
        hypothesis=hypothesis,
    )
    return create_candidate(candidate_draft, registry=registry)
