"""Validation helpers for AutoShortsBot growth test batches."""

from __future__ import annotations

import json
from collections import Counter
from pathlib import Path
from typing import Any

REQUIRED_IDEA_FIELDS = {
    "id",
    "pillar",
    "title",
    "platform_target",
    "duration_seconds",
    "hook",
    "script_outline",
    "visual_concept",
    "caption",
    "cta",
    "quality_score",
}



def load_testbatch(path: Path) -> dict[str, Any]:
    """Load a JSON test batch from disk."""
    with path.open("r", encoding="utf-8") as handle:
        return json.load(handle)


def duration_bucket(seconds: int) -> str:
    """Classify duration for growth testing and TikTok rewards candidates."""
    if seconds >= 60:
        return "tiktok_rewards_candidate"
    return "growth"


def validate_testbatch(batch: dict[str, Any]) -> dict[str, Any]:
    """Return a compact validation summary for Telegram review and tests."""
    ideas = batch.get("ideas", [])
    pillar_counts = Counter(idea.get("pillar") for idea in ideas)
    duration_counts = Counter(duration_bucket(int(idea.get("duration_seconds", 0))) for idea in ideas)

    missing_fields: list[dict[str, Any]] = []
    for idea in ideas:
        missing = sorted(REQUIRED_IDEA_FIELDS - set(idea))
        if missing:
            missing_fields.append({"id": idea.get("id", "<missing-id>"), "missing": missing})

    quality_scores = [int(idea.get("quality_score", 0)) for idea in ideas]

    return {
        "name": batch.get("name"),
        "total_ideas": len(ideas),
        "pillars": dict(sorted(pillar_counts.items())),
        "duration_buckets": {
            "growth": duration_counts.get("growth", 0),
            "tiktok_rewards_candidate": duration_counts.get("tiktok_rewards_candidate", 0),
        },
        "missing_fields": missing_fields,
        "minimum_quality_score": min(quality_scores) if quality_scores else 0,
    }
