# -*- coding: utf-8 -*-
r"""B149: thêm TÊN cho mọi bảng (bang(...)) trong tab_api.py — sửa từng chỗ có kiểm chứng số lần thay."""
import io, re, shutil

P = r'C:\Claw 2\Nghien cuu\Dashboard-CSDL\tab_api.py'
shutil.copy2(P, P + '.bak_b149')
s = io.open(P, encoding='utf-8').read()

# 1) cho hàm bang() nhận thêm tiêu đề
s = s.replace("def bang(cot, hang, rong=None):\n    return {'loai': 'bang', 'cot': cot, 'hang': hang, 'rong': rong or []}",
              "def bang(cot, hang, rong=None, tieu_de=''):\n    return {'loai': 'bang', 'tieu_de': tieu_de, 'cot': cot, 'hang': hang, 'rong': rong or []}")

CAP = [
    ("the.append(bang(['Khách hàng', 'Số mẫu', 'Tổng số lượng'], hang, ['', '70px', '90px']))",
     "the.append(bang(['Khách hàng', 'Số mẫu', 'Tổng số lượng'], hang, ['', '70px', '90px'], 'Top 15 khách hàng theo số mẫu'))"),
    ("the.append(bang(['Nhà máy', 'Khu vực', 'Cont lũy kế'], hang, ['', '90px', '80px']))",
     "the.append(bang(['Nhà máy', 'Khu vực', 'Cont lũy kế'], hang, ['', '90px', '80px'], 'Top 15 nhà máy theo cont (lũy kế toàn CSDL)'))"),
    ("the.append(bang(['Khách hàng', 'Kg kỳ này', 'Kg/ngày', 'Kỳ'], hang, ['', '90px', '80px', '50px']))",
     "the.append(bang(['Khách hàng', 'Kg kỳ này', 'Kg/ngày', 'Kỳ'], hang, ['', '90px', '80px', '50px'], 'Chi tiết khách hàng kỳ mới nhất (20 dòng theo Kg)'))"),
    ("the.append(bang(['Khách hàng (CSDL C)', 'Kg năm 2026', 'Kg/ngày TB', 'Nhóm'], hang, ['', '100px', '90px', '50px']))",
     "the.append(bang(['Khách hàng (CSDL C)', 'Kg năm 2026', 'Kg/ngày TB', 'Nhóm'], hang, ['', '100px', '90px', '50px'], 'Top khách hàng theo sản lượng năm 2026 (CSDL C)'))"),
    ("the.append(bang(['Ngày', 'Nhà máy', 'Vụ việc', 'Loại lỗi', 'Giai đoạn', 'Trạng thái'], hang,\n                    ['70px', '', '', '', '', '110px']))",
     "the.append(bang(['Ngày', 'Nhà máy', 'Vụ việc', 'Loại lỗi', 'Giai đoạn', 'Trạng thái'], hang,\n                    ['70px', '', '', '', '', '110px'], '20 sự cố KPH gần nhất'))"),
    ("the.append(bang(['Tuần', 'Nhà máy', 'Mã mẫu', 'Khách hàng', 'Ngày nhận', 'Kỹ thuật', 'Trạng thái'], hang,\n                    ['52px', '', '100px', '', '80px', '', '80px']))",
     "the.append(bang(['Tuần', 'Nhà máy', 'Mã mẫu', 'Khách hàng', 'Ngày nhận', 'Kỹ thuật', 'Trạng thái'], hang,\n                    ['52px', '', '100px', '', '80px', '', '80px'], 'Mẫu còn đang làm (25 dòng mới nhất)'))"),
    ("the.append(bang(['Nhà máy', 'Khu vực', 'Đối thủ (tách tự động)', 'Cont đối thủ', '% mình còn', 'Nguyên văn ghi chú cạnh tranh'],\n                    ct['hang'], ['', '90px', '', '80px', '70px', '']))",
     "the.append(bang(['Nhà máy', 'Khu vực', 'Đối thủ (tách tự động)', 'Cont đối thủ', '% mình còn', 'Nguyên văn ghi chú cạnh tranh'],\n                    ct['hang'], ['', '90px', '', '80px', '70px', ''], 'CẠNH TRANH Ở CÁC NHÀ MÁY — ' + ct['nhan'] + ' (đối thủ tách tự động từ ghi chú báo cáo)'))"),
    ("the.append(bang(['Nhà máy', 'Khu vực', 'Cont', 'Chi tiết', 'Cạnh tranh'], hang, ['', '90px', '60px', '', '']))",
     "the.append(bang(['Nhà máy', 'Khu vực', 'Cont', 'Chi tiết', 'Cạnh tranh'], hang, ['', '90px', '60px', '', ''], 'Chi tiết sản xuất tuần mới nhất (30 nhà máy)'))"),
    ("the.append(bang(['Tuần', 'Ngày lập', 'KTV', 'Cụm nhà máy', 'Loại', 'Nội dung'], hang,\n                    ['52px', '80px', '', '', '', '']))",
     "the.append(bang(['Tuần', 'Ngày lập', 'KTV', 'Cụm nhà máy', 'Loại', 'Nội dung'], hang,\n                    ['52px', '80px', '', '', '', ''], '20 báo cáo kỹ thuật gần nhất'))"),
    ("the.append(bang(['Quy trình (CSDL A)', 'Loại', 'Khách hàng', 'Hệ sơn', 'Số bước', 'Ngày'], hang,\n                    ['', '110px', '', '', '60px', '80px']))",
     "the.append(bang(['Quy trình (CSDL A)', 'Loại', 'Khách hàng', 'Hệ sơn', 'Số bước', 'Ngày'], hang,\n                    ['', '110px', '', '', '60px', '80px'], '20 quy trình mới nhất trong CSDL A'))"),
]

ok = 0
for cu, moi in CAP:
    if cu in s:
        s = s.replace(cu, moi, 1)
        ok += 1
    else:
        print('  KHÔNG khớp:', cu[:70].replace('\n', ' '))

io.open(P, 'w', encoding='utf-8').write(s)
print('  đã thêm tiêu đề cho %d/%d bảng' % (ok, len(CAP)))
print('  số lần gọi bang(:', s.count('bang(['))
print('  số bảng ĐÃ có tiêu đề:', len(re.findall(r"bang\(\[[^\]]*\],\s*[^)]*?,\s*'[^']+'\)", s, re.S)))
