"""Buduje korpus pomiaru z tekstów serwisu ekspertodsztucznejinteligencji.pl (pliki Markdown z frontmatterem YAML).

Użycie: python przygotuj_korpus.py <katalog src/content> <katalog wyjściowy>

Reguła zamrożona 7 października 2026, przed pomiarem:
- dokumenty to pliki <kolekcja>/<slug>.md w kolejności alfabetycznej ścieżek (blog/, odpowiedzi/, uslugi/);
- treść po frontmatterze jest dzielona na akapity pustymi liniami;
- pomijane są nagłówki, tabele, bloki kodu (```) i akapity krótsze niż 15 słów;
- linki Markdown są zamieniane na sam tekst, znaczniki HTML usuwane;
- każdy akapit dostaje identyfikator <dokument>#<numer>, numerowany od 0 wśród zachowanych akapitów;
- pytania FAQ pochodzą z pola `faq` frontmattera, w kolejności plików i pozycji; trafny dokument to tekst, z którego pytanie pochodzi.

Skrypt wypisuje pierwsze 16 znaków SHA-256 obu plików; dla stanu serwisu z 7 października 2026 (commit 47d00ae)
wartości to 8579c528438e58fa (fragmenty.json) i ddc3961aae23184a (pytania-faq.json), takie same jak w wyniki.json.
Plik pytania-trudne.json nie jest generowany: to 60 pytań spisanych ręcznie przed pomiarem."""
import glob
import hashlib
import json
import os
import re
import sys

import yaml

src, out = sys.argv[1], sys.argv[2]
os.makedirs(out, exist_ok=True)
fragmenty, faq = [], []
for path in sorted(glob.glob(os.path.join(src, "*", "*.md"))):
    doc = os.path.relpath(path, src)[:-3]
    md = open(path, encoding="utf-8").read()
    fm, body = md.split("\n---\n", 1)
    meta = yaml.safe_load(fm[4:])
    body = re.sub(r"```.*?```", "", body, flags=re.S)
    i = 0
    for blok in re.split(r"\n\s*\n", body):
        blok = blok.strip()
        if not blok or blok.startswith("#") or blok.startswith("|"):
            continue
        blok = re.sub(r"\[([^\]]+)\]\([^)]+\)", r"\1", blok)
        blok = re.sub(r"<[^>]+>", "", blok)
        if len(blok.split()) < 15:
            continue
        fragmenty.append({"id": f"{doc}#{i}", "doc": doc, "title": meta["title"], "text": blok})
        i += 1
    for item in meta.get("faq") or []:
        faq.append({"q": item["q"], "doc": doc, "a": item["a"]})

for nazwa, dane in (("fragmenty.json", fragmenty), ("pytania-faq.json", faq)):
    sciezka = os.path.join(out, nazwa)
    with open(sciezka, "w", encoding="utf-8") as f:
        json.dump(dane, f, ensure_ascii=False, indent=0)
    print(nazwa, len(dane), hashlib.sha256(open(sciezka, "rb").read()).hexdigest()[:16])
