import json,os,glob
OUT="/var/www/2.SOURCES/GAB/CONVERSION-OUTPUT"
man=json.load(open(f"{OUT}/_manifest-390.json"))["gabs"]
# index dossiers réels
fold={os.path.basename(d):d for d in glob.glob(f"{OUT}/LOT-*/GAB-*")}
def has_todo(gid):
    d=fold.get(gid); 
    if not d: return False
    try: return "_TODO" in open(f"{d}/instance.example.json",encoding='utf-8').read()
    except: return False

# 1) index machine
idx=[]
for g in man:
    gid=g["gab_id"]; d=fold.get(gid)
    if not d: continue
    rel=d.replace(OUT+"/","")
    idx.append({"gab_id":gid,"canonical_name":g["canonical_name"],"module_owner":g["module_owner"],
        "renderer_key":g["renderer_key"],"lot":os.path.basename(os.path.dirname(d)),
        "dir":rel,"renderer":rel+"/renderer.html","instance":rel+"/instance.example.json",
        "schema":rel+"/schema.contract.json","sensible":g["sensible"],"has_todo":has_todo(gid)})
json.dump({"count":len(idx),"gabs":idx},open(f"{OUT}/_index-390.json","w"),ensure_ascii=False,indent=1)

# 2) matrice de consolidation renderer_key -> blocs React
from collections import defaultdict
byrk=defaultdict(list)
for e in idx: byrk[e["renderer_key"]].append(e["gab_id"])
with open(f"{OUT}/RENDERER-CONSOLIDATION-MATRIX.csv","w") as f:
    f.write("renderer_key,nb_instances,nb_blocs_React_a_creer,exemples_gab\n")
    for rk in sorted(byrk,key=lambda k:-len(byrk[k])):
        f.write(f"{rk},{len(byrk[rk])},1,{';'.join(byrk[rk][:6])}\n")
print("renderer_key -> nb instances:")
for rk in sorted(byrk,key=lambda k:-len(byrk[k])): print(f"  {rk}: {len(byrk[rk])} instances -> 1 bloc React")
print(f"\nTOTAL blocs React à créer = {len(byrk)} (pour {len(idx)} instances)")
nb_sens=sum(1 for e in idx if e["sensible"]); nb_todo=sum(1 for e in idx if e["has_todo"])
print(f"sensibles={nb_sens} · has_todo={nb_todo}")
