# -*- coding: utf-8 -*-
r"""B73: verify portal T41 — (1) grep chuỗi tuần cũ/placeholder; (2) mở bằng Chrome thật kiểm title/h1/tab/số hàng bảng."""
import json, os, re, subprocess, time

P = r'C:\Claw 2\Bao cao - Hanh chinh\BAOCAOTONGHOP\HTML\Tuan 41\Bao_cao_LamMau_Tuan41_Portal.html'
s = open(P, encoding='utf-8', errors='replace').read()
print('  === 1. grep file HTML (%d ký tự) ===' % len(s))
for pat in ('Tuần 40', 'Tuan40', '28/09', '04/10', 'Tuan_40', '__PLACEHOLDER__', '>__<', '{{'):
    n = s.count(pat)
    print('   %-18s %d %s' % (pat, n, '← CẦN XEM' if n else '✓'))
print('   có "Tuần 41":', s.count('Tuần 41'), '| có "05/10"', s.count('05/10'), '| có "11/10"', s.count('11/10'))

S = 'portal41'


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


lst = ba('browser', 'list')
m = re.search(r'id=(direct_local_\d+)', lst)
print()
print('  browser id:', m.group(1) if m else 'KHÔNG THẤY (kiểm lại trước khi mở)')
if m:
    url = 'file:///' + P.replace('\\', '/').replace(' ', '%20')
    ba('--session', S, 'browser', 'open', m.group(1), url)
    time.sleep(8)
    print('  title:', ba('--session', S, 'eval', 'document.title')[-90:])
    print('  h1   :', ba('--session', S, 'eval', "(document.querySelector('h1')||{}).innerText||'(không có h1)'")[-110:])
    print('  tabs :', ba('--session', S, 'eval', "JSON.stringify([...document.querySelectorAll('[data-tab]')].map(e=>e.getAttribute('data-tab')))")[-160:])
    print('  số hàng từng section:')
    r = ba('--session', S, 'eval', """(() => {const out={}; document.querySelectorAll('section[id]').forEach(sc=>{out[sc.id]=(sc.querySelectorAll('table tbody tr')||[]).length;}); return JSON.stringify(out);})()""")
    print('   ', r[-300:])
    ba('session', 'close', S)
    print('  đã đóng browser')
