import os, sys, json, time

os.environ["BU_NAME"] = "work"
sys.path.insert(0, "/opt/data/browser-harness")
from helpers import goto, wait_for_load, sleep, screenshot, cdp, click, scroll, list_tabs, page_info, new_tab, switch_tab
from admin import daemon_alive, start_remote_daemon

NAME = "work"
assert daemon_alive(NAME), "Browser not alive!"

# Click on the password input field and type the password
print("Clicking on password input field...")
pwd_rect = cdp("Runtime.evaluate", expression="""
    (function() {
        let pwdField = document.getElementById('password-input');
        if (pwdField) {
            let r = pwdField.getBoundingClientRect();
            pwdField.focus();
            return JSON.stringify({x: r.x + r.width/2, y: r.y + r.height/2});
        }
        return 'not found';
    })();
""", returnByValue=True)
print(f"Password field rect: {pwd_rect}")

# Click on the password field
pwd_coords = json.loads(pwd_rect['result']['value'])
cdp("Input.dispatchMouseEvent", type="mouseMoved", x=pwd_coords['x'], y=pwd_coords['y'])
cdp("Input.dispatchMouseEvent", type="mousePressed", x=pwd_coords['x'], y=pwd_coords['y'], button="left", clickCount=1)
cdp("Input.dispatchMouseEvent", type="mouseReleased", x=pwd_coords['x'], y=pwd_coords['y'], button="left", clickCount=1)
time.sleep(0.5)

# Type password character by character
password = "pCrL5Q-t7$mk?B5"
print("Typing password...")
for char in password:
    # Handle special characters - need to use keyDown/keyUp with proper key values
    cdp("Input.dispatchKeyEvent", type="char", text=char)
    time.sleep(0.05)

sleep(1)
screenshot("/tmp/tm_13_password_typed.png")

# Verify password field has content (we can't read the value since it's password type, but we can check length)
pwd_len = cdp("Runtime.evaluate", expression="document.getElementById('password-input').value.length", returnByValue=True)
print(f"Password field length: {pwd_len}")

# Now click Sign In button
print("Clicking Sign In button...")
signin_result = cdp("Runtime.evaluate", expression="""
    (function() {
        let allBtns = document.querySelectorAll('button');
        for (let i = 0; i < allBtns.length; i++) {
            if (allBtns[i].textContent.trim() === 'Sign in') {
                let rr = allBtns[i].getBoundingClientRect();
                allBtns[i].click();
                return JSON.stringify({x: rr.x + rr.width/2, y: rr.y + rr.height/2, txt: allBtns[i].textContent.trim()});
            }
        }
        return 'Sign in button not found';
    })();
""", returnByValue=True)
print(f"Sign in button: {signin_result}")

sleep(8)
screenshot("/tmp/tm_14_after_signin.png")

# Check what page we're on now
page_text = cdp("Runtime.evaluate", expression="document.body.innerText.substring(0, 3000)", returnByValue=True)
print(f"Page text after sign in: {page_text}")

page_url = cdp("Runtime.evaluate", expression="window.location.href", returnByValue=True)
print(f"URL after sign in: {page_url}")