# -*- coding: utf-8 -*-
r"""B122: thử trang dashboard bằng Chrome thật — đăng nhập, đếm biểu đồ đã vẽ, đọc KPI, bắt lỗi JS."""
import re, subprocess, time

S = 'dashtest'
def ba(*a, t=240):
    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()
def ev(js):
    return ba('--session', S, 'eval', js)

lst = ''
for i in range(4):
    lst = ba('browser', 'list')
    if re.search(r'direct_local_\d+', lst):
        break
    time.sleep(3)
m = re.findall(r'(direct_local_\d+)', lst) or ['direct_local_121304831500484624']
print('  browser id:', m[0])
print('  mở:', ba('--session', S, 'browser', 'open', m[0], 'http://127.0.0.1:8097/')[-50:])
time.sleep(6)
print('  trang:', ev("JSON.stringify({title:document.title, co_pass:!!document.querySelector('input[name=mat_khau]')})")[-120:])
# bắt lỗi JS
ev("(()=>{window.__err=[];window.addEventListener('error',e=>window.__err.push(String(e.message)));return 1;})()")
ev("(()=>{const i=document.querySelector('input[name=mat_khau]'); i.value='dash-bdd2bb'; i.closest('form').submit(); return 1;})()")
time.sleep(9)
print('  sau đăng nhập:', ev("JSON.stringify({title:document.title, co_pass:!!document.querySelector('input[name=mat_khau]'), kpi:document.querySelectorAll('#kpis .kpi').length})")[-160:])
print('  biểu đồ:', ev("(()=>{const cs=[...document.querySelectorAll('canvas')]; const ve=cs.filter(c=>Chart.getChart(c)).length; const nhan=(Chart.getChart('c_cont')||{data:{labels:[]}}).data.labels; return JSON.stringify({canvas:cs.length, da_ve:ve, so_tuan:nhan.length, tuan_cuoi:nhan[nhan.length-1]});})()")[-200:])
print('  KPI đọc được:', ev("(()=>[...document.querySelectorAll('#kpis .kpi')].slice(0,4).map(e=>e.innerText.replace(/\\n/g,' = ')).join(' | '))()")[-260:])
print('  nhịp + lọc:', ev("JSON.stringify({nhip:(document.getElementById('nhip')||{}).textContent, loc:(document.getElementById('pill-loc')||{}).textContent, bh:(document.querySelectorAll('#t_kh tbody tr').length)+' KH / '+(document.querySelectorAll('#t_nm tbody tr').length)+' NM'})")[-220:])
print('  lỗi JS:', ev("JSON.stringify(window.__err||[])")[-200:])
print('  bảng tròn (kv):', ev("(()=>{const c=Chart.getChart('c_kv'); return c? JSON.stringify(c.data.labels)+' | '+JSON.stringify(c.data.datasets[0].data) : 'chưa vẽ';})()")[-220:])
