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"]
def rctgt():
    for t in targets():
        if "/reportcenter/" in (t.get("url") or ""): return t
    return None
p=cdp.attach(rctgt()); p.enable()
print("url:", p.eval("location.href"))

# 1. expand Procedure Codes category
p.eval("""(function(){var el=Array.from(document.querySelectorAll('*')).find(function(e){return (e.textContent||'').trim()==='Procedure Codes' && e.children.length===0;}); if(el)el.click();})()""")
time.sleep(2)
# list leaf report names now under it
leaves=p.eval("""(function(){
  function vis(e){var r=e.getBoundingClientRect();return r.width>0&&r.height>0;}
  var out=[];
  document.querySelectorAll('*').forEach(function(e){
    if(!vis(e)||e.children.length!==0)return;
    var t=(e.innerText||'').trim();
    if(t&&t.length>4&&t.length<60) out.push(t);
  });
  return JSON.stringify(Array.from(new Set(out)).slice(0,60));
})()""")
print("LEAVES:", leaves)

# 2. try double-click on a likely report leaf (Procedure Code listing-type). We'll target a leaf containing 'Procedure' but not the category itself
target_name = sys.argv[1] if len(sys.argv)>1 else None
print("target_name:", target_name)
if target_name:
    box=p.eval("""(function(){
      var el=Array.from(document.querySelectorAll('*')).find(function(e){return (e.innerText||'').trim()===%r && e.children.length===0;});
      if(!el) return null;
      var r=el.getBoundingClientRect();
      return JSON.stringify({x:Math.round(r.left+r.width/2), y:Math.round(r.top+r.height/2)});
    })()""" % target_name)
    print("box:", box)
    if box and box!="null":
        b=json.loads(box)
        # real mouse double click via CDP
        for _ in range(2):
            p.send("Input.dispatchMouseEvent", {"type":"mousePressed","x":b["x"],"y":b["y"],"button":"left","clickCount":1})
            p.send("Input.dispatchMouseEvent", {"type":"mouseReleased","x":b["x"],"y":b["y"],"button":"left","clickCount":1})
            time.sleep(0.15)
        time.sleep(5)
        print("url after dblclick:", p.eval("location.href"))
        print("body[:1000]:", (p.eval("document.body.innerText") or "")[:1000])
        btns=p.eval("""(function(){var o=[];document.querySelectorAll('button,a,input[type=button],[role=button]').forEach(function(b){var s=((b.innerText||'')+' '+(b.value||'')+' '+(b.title||'')).trim(); if(s&&s.length<40)o.push(s);}); return JSON.stringify(Array.from(new Set(o)).slice(0,40));})()""")
        print("BUTTONS:", btns)
        p.screenshot("/tmp/amdwork/rc-run-export.png")
print("DONE_RUNEXP")
p.close()
