"""Telegram review-package formatting for content candidates."""

from __future__ import annotations

from dataclasses import dataclass

from autoshorts.scripting.quality import ScriptQualityScore, should_render

_PLATFORM_LABELS = {
    "youtube": "YouTube",
    "tiktok": "TikTok",
    "instagram": "Instagram",
}


@dataclass(frozen=True)
class ReviewPackage:
    """Everything Sir needs to approve, reject, or request changes.

    This structure is deterministic by design: strategy/rendering code can fill
    it, Telegram code can send the rendered text, and publishing code can wait
    for an explicit parsed approval decision.
    """

    candidate_id: str
    title: str
    pillar: str
    duration_seconds: int
    hook: str
    script_summary: str
    visual_concept: str
    caption: str
    hashtags: tuple[str, ...]
    platforms: tuple[str, ...]
    quality_score: ScriptQualityScore
    policy_notes: tuple[str, ...] = ()
    preview_path: str | None = None


def _join_or_dash(items: tuple[str, ...]) -> str:
    return "; ".join(items) if items else "-"


def _platform_names(platforms: tuple[str, ...]) -> str:
    labels = [_PLATFORM_LABELS.get(platform, platform) for platform in platforms]
    return ", ".join(labels) if labels else "-"


def _approval_commands(platforms: tuple[str, ...]) -> list[str]:
    commands = ["Freigabe alle"]
    for platform in platforms:
        label = _PLATFORM_LABELS.get(platform, platform.title())
        commands.append(f"Freigabe {label}")
    commands.extend(["Ablehnen", "Ändern: <Wunschänderung>"])
    return commands


def render_telegram_review_package(package: ReviewPackage) -> str:
    """Render a concise Telegram-friendly review message."""

    score = package.quality_score
    render_allowed = should_render(score)
    gate_line = "Render gate: READY" if render_allowed else "Render gate: BLOCKED — nicht automatisch rendern"
    hashtags = " ".join(package.hashtags) if package.hashtags else "-"
    preview = package.preview_path or "-"
    commands = "\n".join(f"- `{command}`" for command in _approval_commands(package.platforms))

    return "\n".join(
        [
            f"## Review: {package.candidate_id}",
            f"Title: {package.title}",
            f"Pillar: {package.pillar}",
            f"Platforms: {_platform_names(package.platforms)}",
            f"Duration: {package.duration_seconds}s",
            "",
            f"Hook: {package.hook}",
            f"Script: {package.script_summary}",
            f"Visual: {package.visual_concept}",
            f"Caption: {package.caption}",
            f"Hashtags: {hashtags}",
            "",
            f"Quality: {score.average_quality:.1f}/10",
            f"AI-slop risk: {score.ai_slop_risk}/10",
            f"Policy: {_join_or_dash(package.policy_notes)}",
            gate_line,
            f"Preview: {preview}",
            "",
            "Approval commands:",
            commands,
        ]
    )
