#!/usr/bin/env python3
import sys as _sys
_sys.path.insert(0, "/root/aria/lib")
from aria_logging import get_logger as _get_logger
_log = _get_logger("aria-akp-yt-discovery")

"""YT-Trending-Discovery — KAR-74 / Video-Knowledge-Strategy Gap 5.

Sucht via yt-dlp 'ytsearch20:<term>' nach neuen AI-Channels, vergleicht mit
existing youtube-channel-subscriptions.md, schreibt Diff-Report als Vorschlag.

Aufruf: python3 aria-akp-yt-discovery.py
Output: /root/aria/brain/00-Inbox/yt-discovery-YYYY-MM-DD.md

Wird nicht im Cron eingebunden — manuell oder via 'Action 6' Trigger.
"""
import json, re, subprocess, sys
from datetime import datetime, timezone
from pathlib import Path
from collections import Counter

SEARCH_TERMS = [
    "claude code",
    "claude agent skills",
    "MCP server tutorial",
    "AI agents 2026",
    "LLM evals",
    "agentic workflow",
    "RAG production",
    "context engineering",
    "claude opus",
    "ai coding agent",
    "claude code hooks",
    "anthropic skills",
]
MAX_PER_TERM = 20
SUBS = Path("/root/aria/brain/05-Referenzen/youtube-channel-subscriptions.md")
OUT = Path(f"/root/aria/brain/00-Inbox/yt-discovery-{datetime.now(timezone.utc).strftime('%Y-%m-%d')}.md")

subs = set()
for line in SUBS.read_text().splitlines():
    m = re.match(r"^-\s+(@\w[\w\-_.]*|UC[\w\-_]{20,})", line)
    if m:
        subs.add(m.group(1).lstrip("@").lower())

discovered = Counter()
discovered_meta = {}
for term in SEARCH_TERMS:
    print(f"Searching: {term}", file=sys.stderr)
    try:
        result = subprocess.run([
            "yt-dlp",
            f"ytsearch{MAX_PER_TERM}:{term}",
            "--flat-playlist",
            "--dump-json",
            "--no-warnings",
            "--quiet",
        ], capture_output=True, text=True, timeout=120)
        for line in result.stdout.splitlines():
            try:
                d = json.loads(line)
                uploader = (d.get("uploader") or d.get("channel") or "").lower().replace(" ", "")
                channel_id = d.get("channel_id") or ""
                if not uploader:
                    continue
                if uploader in subs or channel_id.lower() in subs:
                    continue
                discovered[uploader] += 1
                if uploader not in discovered_meta:
                    discovered_meta[uploader] = {
                        "channel_id": channel_id,
                        "first_term": term,
                        "first_title": (d.get("title") or "")[:80],
                    }
            except Exception:
                pass
    except subprocess.TimeoutExpired:
        print(f"  TIMEOUT for: {term}", file=sys.stderr)
    except Exception as e:
        print(f"  ERROR: {e}", file=sys.stderr)

top = discovered.most_common(50)

lines = [
    "---",
    f"title: YT-Discovery — {datetime.now(timezone.utc).strftime('%Y-%m-%d')}",
    "type: inbox",
    "tags: [akp, yt-discovery, akp-discovery, video-knowledge-strategy]",
    f"date: {datetime.now(timezone.utc).strftime('%Y-%m-%d')}",
    "status: aktiv",
    "related: [[youtube-channel-activity-2026-W21]] [[video-knowledge-strategy-audit-2026-05-21]]",
    "---",
    "",
    f"# YT-Discovery Report — {datetime.now(timezone.utc).strftime('%Y-%m-%d')}",
    "",
    f"Sucht via yt-dlp ueber {len(SEARCH_TERMS)} AI-Terms. Channels die noch nicht in Subscription-File sind.",
    "",
    f"**Search-Terms:** {', '.join(SEARCH_TERMS)}",
    "",
    f"**Total new channels discovered:** {len(discovered)}",
    "",
    "## Top 50 nach Trefferzahl",
    "",
    "| Channel | Hits | Beispiel-Title (first match) | First Term |",
    "|---|---|---|---|",
]
for ch, cnt in top:
    meta = discovered_meta.get(ch, {})
    title = meta.get("first_title", "").replace("|", "\\|")
    lines.append(f"| `@{ch}` | {cnt} | {title} | {meta.get('first_term', '')} |")
lines.append("")
lines.append("## Aktion")
lines.append("")
lines.append("Review-Empfehlung: Channels mit Hits >=3 sind starke Kandidaten fuer Subscription-Add.")
lines.append("Channels mit Hits >=2 sind moderate Kandidaten.")
lines.append("Channels mit Hits == 1 sind Hit-Wonder, optional.")
lines.append("")
lines.append("Aria-eigenstaendig: Channels mit Hits >= 5 koennen sofort in `youtube-channel-subscriptions.md` aufgenommen werden.")

OUT.write_text("\n".join(lines))
print(f"OK: {OUT}")
