"""Merge the English hover translations of Book/L4/en_done_*.json into curriculum/en_machine.py, then report what is still missing.
    python tools/merge_en.py"""
import os, sys, json, glob, re
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, ROOT)
OUT = os.path.join(ROOT, "curriculum", "en_machine.py")


def main():
    ns = {}
    if os.path.exists(OUT):
        exec(open(OUT, encoding="utf-8").read(), ns)
    done = dict(ns.get("MACHINE", {}))
    bad = 0
    for f in sorted(glob.glob(os.path.join(ROOT, "Book", "L4", "en_done_*.json"))):
        for k, v in json.load(open(f, encoding="utf-8")).items():
            if isinstance(v, str) and v.strip() and k.count("___") == v.count("___"):
                done[k] = v.strip()
            else:
                bad += 1
    with open(OUT, "w", encoding="utf-8") as f:
        f.write('# -*- coding: utf-8 -*-\n"""English hover text for Level 4+ strings, generated with a language model and merged by tools/merge_en.py.\n'
                'Hand-written translations in en_sentences.SENT always win over these."""\n')
        f.write("MACHINE = {\n")
        for k in sorted(done):
            f.write(f"    {json.dumps(k, ensure_ascii=False)}: {json.dumps(done[k], ensure_ascii=False)},\n")
        f.write("}\n")
    import importlib, curriculum as C
    from curriculum import en, en_machine
    importlib.reload(en_machine); importlib.reload(en)
    miss = [s for s in en.missing(C.UNITS) if not re.search(r"[\u0600-\u06FF]", s)]
    print(len(done), "translations;", bad, "rejected;", len(miss), "still missing")
    for s in miss[:20]:
        print("  ", repr(s))


if __name__ == "__main__":
    main()
