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

_outf = open("/tmp/amdwork/changepw.out", "w")
def log(*a):
    s = " ".join(str(x) for x in a)
    print(s)
    _outf.write(s + "\n"); _outf.flush()

OLD = open("/home/claude/.config/amd-agent/credentials.env").read()
old_pw = None
user = None
office = None
for line in OLD.splitlines():
    if line.startswith("AMD_PASSWORD="):
        old_pw = line.split("=",1)[1]
    if line.startswith("AMD_USER="):
        user = line.split("=",1)[1]
    if line.startswith("AMD_OFFICE="):
        office = line.split("=",1)[1]
new_pw = open("/tmp/amd-agent-newpassword.txt").read().strip()

target = cdp.find_target("change-password") or cdp.find_target("advancedmd")
if not target:
    log("NO TARGET"); sys.exit(1)
pg = cdp.attach(target)
pg.enable()
log("URL:", pg.eval("location.href"))

# Helper to set a field value with proper event dispatch (Angular/React friendly)
def set_field(field_id, value):
    expr = """(function(){
      var el = document.getElementById(%s);
      if(!el) return 'NOELEM';
      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;
    })()""" % (json.dumps(field_id), json.dumps(value), json.dumps(value))
    return pg.eval(expr)

# username may need to be set if empty
uval = pg.eval("(document.getElementById('username')||{}).value || ''")
log("username currently len:", len(uval or ""))
if not uval:
    log("setting username ->", set_field("username", user))

log("set oldPassword len:", set_field("oldPassword", old_pw))
log("set newPassword len:", set_field("newPassword", new_pw))
log("set confirmPassword len:", set_field("confirmPassword", new_pw))

# verify lengths match expectation without logging values
log("verify old len:", pg.eval("document.getElementById('oldPassword').value.length"))
log("verify new len:", pg.eval("document.getElementById('newPassword').value.length"))
log("verify confirm len:", pg.eval("document.getElementById('confirmPassword').value.length"))
log("btn disabled?:", pg.eval("(document.getElementById('btnSubmit')||{}).disabled"))

pg.screenshot("/tmp/amdwork/before-changepw.png")
log("screenshot before saved")

# Click submit
clicked = pg.eval("(function(){var b=document.getElementById('btnSubmit'); if(!b) return 'NOBTN'; b.click(); return 'CLICKED';})()")
log("click:", clicked)

time.sleep(6)
log("after URL:", pg.eval("location.href"))
log("after title:", pg.eval("document.title"))
log("after bodytext:", (pg.eval("document.body.innerText") or "")[:800])
pg.screenshot("/tmp/amdwork/after-changepw.png")
log("DONE")
pg.close()
