import sys, json, time, os
sys.path.insert(0,'/tmp'); from amd_lib import session, call
from datetime import date, timedelta
KEPT={"3","5","8","9"}
sid=session()
d=date(2026,4,1); end=date(2026,6,16)
kept={}  # pid -> most recent kept {date,provider,name}
errors=[]; days=0
os.makedirs('/tmp/days',exist_ok=True)
while d<=end:
    ds=d.strftime("%Y-%m-%d")
    fp=f"/tmp/days/{ds}.json"
    if os.path.exists(fp):
        rows=json.load(open(fp))
    else:
        try:
            r=call(sid,"get_visit_info_by_date",{"visitdate":ds})
            rows=r.get("rows",[])
            json.dump(rows,open(fp,"w"))
            time.sleep(0.15)
        except Exception as e:
            errors.append((ds,str(e)[:50]))
            if "cooldown" in str(e): print("COOLDOWN at",ds,"days done=",days); break
            rows=[]; time.sleep(0.5)
    days+=1
    for v in rows:
        if v.get("apptstatus") in KEPT:
            pid=v["patient_id"]
            rec=kept.get(pid)
            if rec is None or ds>rec["date"]:
                kept[pid]={"date":ds,"provider":v.get("columnheading",""),"name":v.get("patient_name","")}
    d+=timedelta(days=1)
json.dump(kept,open('/tmp/s2_kept.json','w'))
print("days processed:",days,"| kept pids:",len(kept),"| errors:",len(errors))
if errors: print(errors[:5])
