# -*- coding: utf-8 -*-
r"""B132: thử riêng trường hợp LINK THIẾU dấu / cuối (đúng ca anh Minh gặp) — phải tự chuẩn hoá rồi vào được."""
import re, subprocess, time

def ba(*a, t=300):
    r = subprocess.run(['browser-act'] + list(a), capture_output=True, text=True, encoding='utf-8',
                       errors='replace', timeout=t)
    return ((r.stdout or '') + (r.stderr or '')).strip()

lst = ''
for _ in range(6):
    lst = ba('browser', 'list')
    if re.search(r'direct_local_\d+', lst):
        break
    time.sleep(4)
bid = (re.findall(r'(direct_local_\d+)', lst) or ['direct_local_121304831500484624'])[0]
print('  browser:', bid)

S = 'dashlinka'
URL = 'https://desktop-9gsdkd2.tail0ffe94.ts.net/dashboard'   # KHÔNG có dấu / ở cuối
r = ba('--session', S, 'browser', 'open', bid, URL)
print('  mở link thiếu / :', r[-70:])
time.sleep(9)

def ev(js):
    return ba('--session', S, 'eval', js)

print('  địa chỉ hiện tại  :', ev("location.href").strip('"')[-70:])
print('  có ô mật khẩu     :', ev("!!document.querySelector('input[name=mat_khau]')").strip('"'))
print('  form action (thô) :', ev("(()=>{const f=document.querySelector('form'); return f? f.getAttribute('action') : '(không có)';})()").strip('"'))
print('  form action (đích):', ev("(()=>{const f=document.querySelector('form'); return f? f.action : '(không có)';})()").strip('"'))
ev("(()=>{window.__err=[];window.addEventListener('error',e=>window.__err.push(String(e.message)));return 1;})()")
ev("(()=>{const i=document.querySelector('input[name=mat_khau]'); if(i){i.value='btchem2026'; i.closest('form').submit();} return 1;})()")
time.sleep(12)
print('  SAU ĐĂNG NHẬP     :', ev("JSON.stringify({dia:location.pathname, tieu_de:document.title, kpi:document.querySelectorAll('#kpis .kpi').length, ve:[...document.querySelectorAll('canvas')].filter(c=>Chart.getChart(c)).length, loi:(window.__err||[]).slice(0,3)})")[-240:])
ba('session', 'close', S)
