#!/usr/bin/env python3
"""Build the master Maven Brain note from lessons-classified.jsonl.

Output: /root/aria/brain/02-Wissen/maven-free-lessons-master-2026-05-19.md
"""
from __future__ import annotations

import json
from collections import Counter, defaultdict
from datetime import datetime
from pathlib import Path

CLASSIFIED = Path("/root/aria/state/maven/lessons-classified.jsonl")
OUT = Path("/root/aria/brain/02-Wissen/maven-free-lessons-master-2026-05-19.md")


def fmt_title(s: str | None) -> str:
    if not s:
        return "(ohne Titel)"
    return s.replace("|", "\\|").strip()


def main():
    rows = []
    for line in CLASSIFIED.read_text().splitlines():
        if not line.strip():
            continue
        try:
            rows.append(json.loads(line))
        except json.JSONDecodeError:
            pass  # tolerate mid-write lines
    n_total = len(rows)
    if n_total == 0:
        print("no rows yet")
        return

    by_tag: dict[str, list[dict]] = defaultdict(list)
    for r in rows:
        for t in r.get("tags") or []:
            by_tag[t].append(r)

    instructor_counter = Counter(r.get("instructor_name") for r in rows if r.get("instructor_name"))
    school_counter = Counter(r.get("school_name") for r in rows if r.get("school_name"))

    aria_sorted = sorted(rows, key=lambda r: r.get("aria_score", 0), reverse=True)

    lines: list[str] = []
    lines.append("---")
    lines.append("title: Maven free-lessons — Master Index")
    lines.append("type: reference")
    lines.append("tags: [maven, ai, learning, index, scrape]")
    lines.append(f"date: 2026-05-19")
    lines.append(f"updated: {datetime.utcnow().isoformat()}Z")
    lines.append("source: https://maven.com/free-lessons (sitemap.xml + Kais RTF dump 3188 URLs)")
    lines.append(f"lessons_indexed: {n_total}")
    lines.append("---")
    lines.append("")
    lines.append("## Was steht hier")
    lines.append("")
    lines.append("Maven.com hostet kostenlose Workshop-Aufzeichnungen — Kais hat 3188 free-lessons")
    lines.append("im UI gesehen. Sitemap exposed 5268 lesson-URLs. Diese Note ist der")
    lines.append("Master-Index der gecrawlten Metadaten (Title, Speaker, Datum, Dauer,")
    lines.append("Beschreibung, Chapter-Count, Topic-Tags, Aria/Kadi-Relevanz-Score).")
    lines.append("")
    lines.append("Transkripte selbst sind nicht in dieser Note — Maven blockt Headless-Browser-")
    lines.append("Zugriff via Firebase-Session-Validation. Im 2. Pass (cross-reference YouTube)")
    lines.append("werden die Top-Relevanten transkribiert.")
    lines.append("")
    lines.append("## Top 50 nach Aria/Kadi-Relevanz")
    lines.append("")
    lines.append("| Score | Titel | Speaker | Tags |")
    lines.append("|---:|---|---|---|")
    for r in aria_sorted[:50]:
        title = fmt_title(r.get("title"))
        speaker = r.get("instructor_name") or "?"
        tags = ", ".join(r.get("tags") or [])
        score = r.get("aria_score", 0)
        url = r.get("url", "")
        title_link = f"[{title}]({url})" if url else title
        lines.append(f"| {score} | {title_link} | {speaker} | {tags} |")
    lines.append("")

    lines.append("## Top 30 Speaker (nach Lesson-Count)")
    lines.append("")
    lines.append("| Lessons | Speaker |")
    lines.append("|---:|---|")
    for name, n in instructor_counter.most_common(30):
        lines.append(f"| {n} | {name} |")
    lines.append("")

    lines.append("## Top 30 Schulen (nach Lesson-Count)")
    lines.append("")
    lines.append("| Lessons | School |")
    lines.append("|---:|---|")
    for name, n in school_counter.most_common(30):
        lines.append(f"| {n} | {name} |")
    lines.append("")

    lines.append("## Tag-Verteilung")
    lines.append("")
    lines.append("| Lessons | Tag |")
    lines.append("|---:|---|")
    tag_total = Counter()
    for r in rows:
        for t in r.get("tags") or []:
            tag_total[t] += 1
    for tag, n in tag_total.most_common():
        lines.append(f"| {n} | {tag} |")
    lines.append("")

    lines.append("## Pro Tag — Top 10 Lessons je Cluster")
    lines.append("")
    for tag, lst in sorted(by_tag.items(), key=lambda x: -len(x[1])):
        top = sorted(lst, key=lambda r: r.get("aria_score", 0), reverse=True)[:10]
        if not top:
            continue
        lines.append(f"### {tag} ({len(lst)} lessons total — top 10)")
        lines.append("")
        for r in top:
            title = fmt_title(r.get("title"))
            speaker = r.get("instructor_name") or "?"
            url = r.get("url", "")
            link = f"[{title}]({url})" if url else title
            lines.append(f"- **{link}** — {speaker} (Score {r.get('aria_score', 0)})")
        lines.append("")

    lines.append("## Datenstand")
    lines.append("")
    lines.append(f"- Lessons indexiert: **{n_total}** / 3188 total (laut Kais RTF-Dump)")
    lines.append(f"- Raw NEXT_DATA-Snapshots: `/root/aria/state/maven/lessons-raw/`")
    lines.append(f"- Klassifizierter Index: `/root/aria/state/maven/lessons-classified.jsonl`")
    lines.append(f"- Crawl-Script: `/root/aria/scripts/maven-crawl.py`")
    lines.append(f"- Classifier-Script: `/root/aria/scripts/maven-classify.py`")
    lines.append(f"- Note-Builder: `/root/aria/scripts/maven-build-note.py`")
    lines.append("")

    OUT.parent.mkdir(parents=True, exist_ok=True)
    OUT.write_text("\n".join(lines))
    print(f"wrote {OUT} ({len(lines)} lines, {n_total} lessons)")


if __name__ == "__main__":
    main()
