import sys, time, json, urllib.request
sys.path.insert(0, "/tmp/amdwork")
import cdp
LOG="/tmp/amdwork/rc_openreport.log"
def log(*a):
    with open(LOG,"a") as f: f.write(" ".join(str(x) for x in a)+"\n")
open(LOG,"w").close()
def targets():
    return [t for t in json.loads(urllib.request.urlopen("http://localhost:9223/json",timeout=10).read()) if t.get("type")=="page"]
rc=None
for t in targets():
    if "/reportcenter/" in (t.get("url") or ""): rc=t; break
p=cdp.attach(rc); p.enable()
log("RC url:", p.eval("location.href"))

REPORT = "Care Team Roster"
SEARCHTERM = "Care Team"
p.eval("""(function(){
  var i=document.querySelector('input[placeholder*=Find],input[type=text],input[type=search]');
  if(i){Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set.call(i,%r);
  i.dispatchEvent(new Event('input',{bubbles:true}));i.dispatchEvent(new Event('keyup',{bubbles:true}));}
})()""" % SEARCHTERM)
time.sleep(2)
r=p.eval("""(function(){
  var el=Array.from(document.querySelectorAll('a,li,span,div,td,h4,h5')).find(function(e){return (e.innerText||'').trim()===%r && e.children.length===0;});
  if(!el) return 'NOREPORT';
  el.click(); return 'clicked';
})()""" % REPORT)
log("click report:", r)
time.sleep(5)
log("url after:", p.eval("location.href"))
log("body after:", json.dumps((p.eval("document.body.innerText") or "")[:1500]))
btns=p.eval("""(function(){
  function vis(e){var r=e.getBoundingClientRect();return r.width>0&&r.height>0;}
  var out=[];
  document.querySelectorAll('button,a,[role=button],input[type=button],input[type=submit]').forEach(function(b){
    if(!vis(b))return;
    var s=((b.innerText||b.value||'')+' '+(b.title||'')+' '+(b.getAttribute('aria-label')||'')).trim();
    if(s && s.length<50) out.push(s);
  });
  var seen={};var u=[];out.forEach(function(s){if(!seen[s]){seen[s]=1;u.push(s);}});
  return JSON.stringify(u.slice(0,40));
})()""")
log("BUTTONS:", btns)
p.screenshot("/tmp/amdwork/rc-report-open.png")
log("SHOT:/tmp/amdwork/rc-report-open.png")
log("DONE_OPEN")
p.close()
