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

LOG="/tmp/amdwork/reports_explore.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"]
pm=None
for t in targets():
    if "/amds/pm/app/" in (t.get("url") or ""):
        pm=t; break
if not pm:
    log("NO_PM"); log("DONE_REPORTS"); sys.exit(0)
p=cdp.attach(pm); p.enable()
log("PM url:", p.eval("location.href"))

# Find the Reports menu item in top menu and report what clicking reveals.
# Dump the top menu structure
menu=p.eval("""(function(){
  var items=Array.from(document.querySelectorAll('*')).filter(function(e){
    var t=(e.innerText||'').trim();
    return e.children.length===0 && (t==='Reports'||t==='Report Center'||t==='Report Center'||t==='Reports Center');
  }).map(function(e){return {tag:e.tagName,txt:(e.innerText||'').trim(),cls:e.className};});
  return JSON.stringify(items.slice(0,20));
})()""")
log("Reports-like elements:", menu)

# Click 'Reports' top menu (exact text match, prefer menu/toolbar)
clicked=p.eval("""(function(){
  var cands=Array.from(document.querySelectorAll('a,span,div,li,button')).filter(function(e){
    return (e.innerText||'').trim()==='Reports' && e.offsetParent!==null;
  });
  if(!cands.length) return 'NO_REPORTS_MENU';
  cands[0].click();
  return 'clicked Reports ('+cands.length+' cands)';
})()""")
log("click Reports:", clicked)
time.sleep(2)
# capture any dropdown/submenu items now visible
sub=p.eval("""(function(){
  function vis(e){var r=e.getBoundingClientRect();var s=getComputedStyle(e);return r.width>0&&r.height>0&&s.display!=='none'&&s.visibility!=='hidden';}
  var out=[];
  Array.from(document.querySelectorAll('a,li,span,div,button')).forEach(function(e){
    if(!vis(e))return;
    var t=(e.innerText||'').trim();
    if(t && t.length<40 && /report|center|export|aging|encounter|transaction|payment|charge|patient list/i.test(t)){
      out.push(t);
    }
  });
  return JSON.stringify(Array.from(new Set(out)).slice(0,60));
})()""")
log("submenu/report items visible:", sub)
p.screenshot("/tmp/amdwork/reports-menu.png")
log("SHOT:/tmp/amdwork/reports-menu.png")
log("DONE_REPORTS")
p.close()
