import json, os, time, sys
sys.path.insert(0,'/tmp'); from amd_lib import session, call
from datetime import date
def pmd(s): m,d,y=s.split('/'); return date(int(y),int(m),int(d))
KEPT={"3","5","8","9"}; SCHED_OR_KEPT={0,1,2,3,5,7,8,9}
LO=date(2026,4,1); TODAY=date(2026,6,16)
sid=session()
# 1) enumerate kept-in-window visits via get_updated_visits since 2026-04-01
uv=call(sid,"get_updated_visits",{"lastmodifieddate":"2026-04-01"})
rows=uv.get("rows",[])
json.dump(rows, open('/tmp/s2_updated_visits.json','w'))
kept={}
for r in rows:
    if r["apptstatus"] in KEPT and LO<=pmd(r["date"])<=TODAY:
        pid=r["patient_id"]; d=pmd(r["date"])
        rec=kept.get(pid)
        if rec is None or d>rec["d"]:
            kept[pid]={"d":d,"date":r["date"],"provider":r["columnheading"],"name":r["patient_name"]}
print("get_updated_visits rows:",len(rows),"| kept-in-window pids:",len(kept), flush=True)
json.dump({k:{"date":v["date"],"provider":v["provider"],"name":v["name"]} for k,v in kept.items()}, open('/tmp/s2_kept.json','w'))
# 2) fetch history per kept pid, cache
os.makedirs('/tmp/histories_s2',exist_ok=True)
errors=[]; got=0
for pid in kept:
    fp=f"/tmp/histories_s2/{pid}.json"
    if os.path.exists(fp): continue
    try:
        d=call(sid,"get_appointment_history",{"patientid":pid})
        json.dump([{"date":x["date"],"apptstatus":x["apptstatus"]} for x in d.get("rows",[])], open(fp,"w"))
        got+=1; time.sleep(0.2)
    except Exception as e:
        errors.append((pid,str(e)[:60])); 
        if "cooldown" in str(e): print("COOLDOWN HIT, stopping. got=",got); break
        time.sleep(0.5)
print("s2 hist fetched:",got,"errors:",len(errors), flush=True)
if errors: print(errors[:5])
