import sys, time, json, urllib.request
sys.path.insert(0, "/tmp/amdwork")
import cdp

def targets():
    return [t for t in json.loads(urllib.request.urlopen("http://localhost:9223/json",timeout=10).read()) if t.get("type")=="page"]

# Ensure download behavior (browser-level)
ver=json.loads(urllib.request.urlopen("http://localhost:9223/json/version",timeout=10).read())
import websocket
bws=websocket.create_connection(ver["webSocketDebuggerUrl"],timeout=30,max_size=None); _bid=[0]
def bsend(m,pr=None):
    _bid[0]+=1; mid=_bid[0]; bws.send(json.dumps({"id":mid,"method":m,"params":pr or {}}))
    while True:
        x=json.loads(bws.recv())
        if x.get("id")==mid: return x
bsend("Browser.setDownloadBehavior",{"behavior":"allow","downloadPath":"/home/claude/amd-agent-downloads","eventsEnabled":True})
print("download dir set")

rc=None
for t in targets():
    if "/reportcenter/" in (t.get("url") or ""): rc=t; break
p=cdp.attach(rc); p.enable()
print("url:", p.eval("location.href"))

# Make sure we are on a report setup page that has the export-select. If not, navigate Providers/Groups 685 setup.
has_sel=p.eval("!!document.querySelector('select.export-select')")
print("has export-select:", has_sel)
if not has_sel:
    # navigate to the report setup route
    p.navigate("https://static-100.advancedmd.com/practicemanager/reportcenter/#/main/ProvidersGroups/685#685")
    time.sleep(6)
    has_sel=p.eval("!!document.querySelector('select.export-select')")
    print("has export-select after nav:", has_sel)

# 1. ensure 'Export on Run' checkbox checked
cb=p.eval("""(function(){
  var c=document.querySelector('input.export-checkbox');
  if(!c) return 'NOCB';
  if(!c.checked){ c.click(); }
  return c.checked;
})()""")
print("export checkbox checked:", cb)

# 2. set select to CSV (value for CSV from earlier: text 'CSV(COMMA DELIMITED)')
setsel=p.eval("""(function(){
  var s=document.querySelector('select.export-select');
  if(!s) return 'NOSEL';
  var idx=-1;
  for(var i=0;i<s.options.length;i++){ if(/CSV/i.test(s.options[i].text)){ idx=i; break; } }
  if(idx<0) return 'NOCSV';
  s.selectedIndex=idx;
  // Angular: set value + dispatch change
  s.dispatchEvent(new Event('change',{bubbles:true}));
  s.dispatchEvent(new Event('input',{bubbles:true}));
  return s.options[idx].text;
})()""")
print("selected format:", setsel)

# 3. click Run Report
run=p.eval("""(function(){
  var b=Array.from(document.querySelectorAll('button,a,input[type=button],input[type=submit]')).find(function(x){return (x.innerText||x.value||'').trim()==='Run Report';});
  if(!b) return 'NORUN';
  b.click(); return 'RUN_CLICKED';
})()""")
print("run:", run)
time.sleep(15)
print("url after run:", p.eval("location.href"))
print("body sample:", (p.eval("document.body.innerText") or "")[:400])
p.screenshot("/tmp/amdwork/csv-export-run.png")
print("DONE_CSV")
p.close(); bws.close()
