"""Alege vocabularul pe care îl publică pagina.

Criteriul: cuvântul are un strat atribuit de Wiktionary și apare de cel puțin o
dată la un milion de cuvinte în cel puțin unul dintre cele patru corpusuri
măsurate. Pragul e ales ca să prindă și cuvintele ieșite din uz — „alișveriș",
„beșliu" — pentru care cititorul are cel mai mult de câștigat dacă le caută.

Ieșire: raw/shortlist.json
"""
import json, os, sys

HERE = os.path.dirname(os.path.abspath(__file__))
RAW = os.path.join(HERE, "..", "raw")
sys.path.insert(0, HERE)
from strata import PRIORITY, proximate_layers

THRESHOLD_PPM = float(os.environ.get("PPM", 1.0))


def load_layers():
    cats = json.load(open(os.path.join(RAW, "categories.json"), encoding="utf8"))
    return proximate_layers(cats)


def main():
    lay = load_layers()
    now = json.load(open(os.path.join(RAW, "now_counts.json"), encoding="utf8"))
    hist = json.load(open(os.path.join(RAW, "hist_bins.json"), encoding="utf8"))

    registers = {
        "vorbit": (now["vorbit"]["lemmas"], now["vorbit"]["lemma_tokens"]),
        "scris": (now["scris"]["lemmas"], now["scris"]["lemma_tokens"]),
    }
    hl, ht = {}, 0
    for b in hist["bins"].values():
        ht += b["lemma_tokens"]
        for k, v in b["lemmas"].items():
            hl[k] = hl.get(k, 0) + v
    registers["istoric"] = (hl, ht)

    scored = []
    for w in lay:
        best = 0.0
        for lemmas, tot in registers.values():
            if tot:
                best = max(best, lemmas.get(w, 0) / tot * 1e6)
        if best >= THRESHOLD_PPM:
            scored.append((best, w))
    scored.sort(reverse=True)
    words = [w for _, w in scored]
    # ordine alfabetică pentru cereri stabile către Wiktionary
    words.sort()
    with open(os.path.join(RAW, "shortlist.json"), "w", encoding="utf8") as f:
        json.dump(words, f, ensure_ascii=False)
    print(f"prag {THRESHOLD_PPM} la milion → {len(words)} cuvinte")
    from collections import Counter
    c = Counter(lay[w] for w in words)
    for st in PRIORITY:
        print(f"  {c.get(st,0):>6}  {st}")
    print("scris raw/shortlist.json")


if __name__ == "__main__":
    main()
