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

# 4 distinct questions (by visible text substring) + deterministic answers
QA = [
    ("first pet",            "Maple"),
    ("nearest sibling",      "Austin"),
    ("first job",            "Dallas"),    # "In what town was your first job?"
    ("favorite subject",     "Mathematics"),
]

target = cdp.find_target("capture-security-questions") or cdp.find_target("advancedmd")
pg = cdp.attach(target)
pg.enable()
print("URL:", pg.eval("location.href"))

def pick_question(sel_index, text_sub):
    # open the mat-select at sel_index
    r = pg.eval("""(function(){
      var s = document.querySelectorAll('mat-select')[%d];
      if(!s) return 'NOSEL';
      (s.querySelector('.mat-select-trigger')||s).click();
      return 'OPEN';
    })()""" % sel_index)
    time.sleep(0.8)
    chosen = pg.eval("""(function(){
      var os = Array.from(document.querySelectorAll('mat-option,[role=option]'));
      var t = os.find(function(o){ return o.innerText.toLowerCase().indexOf(%s)>=0; });
      if(!t) return 'NOOPT';
      var picked = t.innerText.trim();
      t.click();
      return picked;
    })()""" % json.dumps(text_sub.lower()))
    time.sleep(0.6)
    return r, chosen

def fill_answer(ans_index, value):
    return pg.eval("""(function(){
      var inps = document.querySelectorAll('input[placeholder="Enter an answer"]');
      var el = inps[%d];
      if(!el) return 'NOINP';
      var proto = Object.getPrototypeOf(el);
      var desc = Object.getOwnPropertyDescriptor(proto,'value')||Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value');
      el.focus();
      if(desc&&desc.set){desc.set.call(el,%s);} else {el.value=%s;}
      el.dispatchEvent(new Event('input',{bubbles:true}));
      el.dispatchEvent(new Event('change',{bubbles:true}));
      el.dispatchEvent(new KeyboardEvent('keyup',{bubbles:true}));
      el.blur();
      return el.value.length;
    })()""" % (ans_index, json.dumps(value), json.dumps(value)))

picked_qs = []
for i,(qsub,ans) in enumerate(QA):
    r,chosen = pick_question(i, qsub)
    alen = fill_answer(i, ans)
    picked_qs.append(chosen)
    print("Q%d open=%s chosen=%r answer_len=%s" % (i+1, r, chosen, alen))

time.sleep(0.5)
# find Save button
btns = pg.eval("""(function(){
  return JSON.stringify(Array.from(document.querySelectorAll('button')).map(function(b){return b.innerText.trim();}));
})()""")
print("BUTTONS:", btns)
print("save btn disabled?:", pg.eval("""(function(){
  var b=Array.from(document.querySelectorAll('button')).find(function(x){return x.innerText.trim().toLowerCase().indexOf('save')>=0;});
  return b ? b.disabled : 'NOSAVE';
})()"""))

pg.screenshot("/tmp/amdwork/secq-filled.png")

clicked = pg.eval("""(function(){
  var b=Array.from(document.querySelectorAll('button')).find(function(x){return x.innerText.trim().toLowerCase().indexOf('save')>=0;});
  if(!b) return 'NOSAVE'; if(b.disabled) return 'DISABLED'; b.click(); return 'CLICKED';
})()""")
print("save click:", clicked)

deadline=time.time()+12; url=None; body=None
while time.time()<deadline:
    time.sleep(2)
    url=pg.eval("location.href"); body=(pg.eval("document.body.innerText") or "")
    if "capture-security-questions" not in (url or ""): break
print("after URL:", url)
print("after body:", (body or "")[:600])
pg.screenshot("/tmp/amdwork/after-secq.png")
# write picked questions to a file for credential storage (questions only here; answers added separately)
open("/tmp/amdwork/picked_questions.json","w").write(json.dumps(picked_qs))
print("DONE")
pg.close()
