import os,glob,re,json
OUT="/var/www/2.SOURCES/GAB/CONVERSION-OUTPUT"
folders=sorted(glob.glob(f"{OUT}/LOT-*/GAB-*"))
def clean(txt):
    # retire les plages de noms de fichiers/dossiers source : GAB-001-390, GAB-216-220, etc.
    txt=re.sub(r'GAB-\d{3}-\d{3}','',txt)
    return txt
true_refs={}
for d in folders:
    gid=os.path.basename(d)
    blob=""
    for fn in ["renderer.html","schema.contract.json","instance.example.json"]:
        p=f"{d}/{fn}"
        if os.path.exists(p): blob+=open(p,encoding='utf-8').read()
    blob=clean(blob)
    refs=sorted(set(x for x in re.findall(r'GAB-\d{3}',blob) if x!=gid))
    if refs: true_refs[gid]=refs
print("=== VRAIES réfs croisées GAB (hors plages de noms de fichiers) ===")
print(f"packs avec une vraie réf hors-GAB : {len(true_refs)} / 390")
for gid in sorted(true_refs): print(f"  {gid} -> {true_refs[gid]}")
# où apparaissent-elles ? (README documenté ou pas)
print("\n=== Documentées (README a une section external_refs/dependencies) ? ===")
doc=0; undoc=[]
for gid,refs in true_refs.items():
    d=[x for x in folders if os.path.basename(x)==gid][0]
    rd=open(f"{d}/README-contract.md",encoding='utf-8').read().lower()
    if "external_refs" in rd or "dépend" in rd or "dependenc" in rd: doc+=1
    else: undoc.append(gid)
print(f"documentées: {doc} · NON documentées: {len(undoc)} -> {undoc}")
