import json, csv, os, sys
OUT = os.path.abspath(sys.argv[1] if len(sys.argv) > 1 else os.getcwd())
doc = json.load(open(os.path.join(OUT,"raw.json"), encoding="utf-8"))
GENES = doc["meta"]["gene_list"]

def count(key):
    r = doc["responses"].get(key)
    if r is None: return None
    j = json.loads(r["body_text"])
    return int(j["esearchresult"]["count"])

rows, fields_seen = [], {}
for g in GENES:
    p = count(f"clinvar:{g}:pathogenic")
    a = count(f"clinvar:{g}:all")
    share = "" if (p is None or a in (None,0)) else f"{p/a:.4f}"
    rows.append({"gene":g,"pathogenic_records":"" if p is None else p,
                 "all_records":"" if a is None else a,"pathogenic_share":share})
    # record what the API itself says it searched
    for kind in ("pathogenic","all"):
        r = doc["responses"].get(f"clinvar:{g}:{kind}")
        if r:
            tr = json.loads(r["body_text"])["esearchresult"].get("querytranslation","")
            fields_seen.setdefault(kind,set()).add(tr)

with open(os.path.join(OUT,"data.csv"),"w",newline="",encoding="utf-8") as f:
    w = csv.DictWriter(f, fieldnames=["gene","pathogenic_records","all_records","pathogenic_share"])
    w.writeheader(); w.writerows(rows)

print("rows:", len(rows))
print("zero pathogenic:", [r["gene"] for r in rows if r["pathogenic_records"]==0])
print("missing all_records:", [r["gene"] for r in rows if r["all_records"]==""])
print("sum pathogenic:", sum(r["pathogenic_records"] for r in rows))
print("sum all:", sum(r["all_records"] for r in rows if r["all_records"]!=""))
ps = sorted([r for r in rows if r["pathogenic_records"]!=""], key=lambda r:-r["pathogenic_records"])
print("TOP5:", [(r["gene"],r["pathogenic_records"],r["pathogenic_share"]) for r in ps[:5]])
print("BOTTOM5:", [(r["gene"],r["pathogenic_records"],r["pathogenic_share"]) for r in ps[-5:]])
sh = sorted([r for r in rows if r["pathogenic_share"]!=""], key=lambda r:-float(r["pathogenic_share"]))
print("SHARE TOP3:", [(r["gene"],r["pathogenic_share"]) for r in sh[:3]])
print("SHARE BOT3:", [(r["gene"],r["pathogenic_share"]) for r in sh[-3:]])
print("median path:", sorted(r["pathogenic_records"] for r in rows)[len(rows)//2])
print("ratio max/min:", max(r["pathogenic_records"] for r in rows), min(r["pathogenic_records"] for r in rows))
print("--- query translations ---")
for k,v in fields_seen.items(): print(k, "|", sorted(v)[:3])
print("--- markdown ---")
print("| Gene | Pathogenic records | All records | Pathogenic share |")
print("| --- | ---: | ---: | ---: |")
for r in rows:
    print(f"| {r['gene']} | {r['pathogenic_records']} | {r['all_records'] or 'not queried'} | {r['pathogenic_share'] or 'n/a'} |")
