# -*- coding: utf-8 -*-
"""Kiểm chứng bản CHỐT v4 + dọn ký hiệu + xuất DOCX trắng đen có ảnh."""
import os, re, shutil, sqlite3, subprocess, time, zipfile
from docx import Document
from docx.shared import RGBColor

D = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
PY = r'C:\Users\admin\AppData\Local\hermes\hermes-agent\venv\Scripts\python.exe'
MD = os.path.join(D, 'DE_XUAT_GON_MAU-TOI_v4_CHOT_2026-10-05.md')
DOCX = os.path.join(D, 'DE_XUAT_GON_MAU-TOI_v4_CHOT_2026-10-05.docx')
DB = os.path.join(D, 'CSDLA.db')
t = open(MD, encoding='utf-8').read()
c = sqlite3.connect(DB)
print('=== 0. CSDLA chỉ đọc? ===')
print('   mtime', time.strftime('%H:%M:%S', time.localtime(os.path.getmtime(DB))), '| size', os.path.getsize(DB),
      '| bước %d · QT %d · bước-QT %d' % tuple(c.execute('select count(*) from %s' % x).fetchone()[0]
                                               for x in ['buoc_chuan', 'quy_trinh', 'buoc_quy_trinh']))
c.close()

dong = [l for l in t.split('\n') if re.match(r'^\| \d+ \|', l)]
print()
print('=== 1. Bảng quy trình CHỐT ===')
print('   số dòng bước:', len(dong))
MA = ['S07', 'B07', 'SW2', 'TBS', 'TBN', 'TB 1501', 'BT 78H', 'BT 01', 'BT 2102', 'BT 2203', '0707', '1024H',
      'Diluent', 'QD 0408', 'TXXT', 'MP 689', 'PT-011', 'PT-002', 'TW.REC', 'PT-06', 'S01-25', '2010H', 'NC KH', 'Titan R628']
print('   mã thương mại trong bảng:', [k for k in MA if k in ''.join(dong)] or 'SẠCH')
print('   "2K" trong bảng:', any('2K' in l for l in dong))
MOC = ['Vá trám', 'Trét lấp', 'Nâng thớ', 'chống loang màu', 'keo tràn', 'Kiểm soát độ ẩm', 'Khử bụi', 'Chà nhám bề mặt']
print('   bước xử lý mộc trong bảng:', [m for m in MOC if any(m.lower() in l.lower() for l in dong)] or 'KHÔNG có')
i_bot = [i for i, l in enumerate(dong, 1) if 'bột bụi' in l.lower()]
i_lotmau = [i for i, l in enumerate(dong, 1) if 'lót nền' in l.lower() or 'lót màu' in l.lower()]
i_lottrong = [i for i, l in enumerate(dong, 1) if 'Sơn Lót' in l and 'trong suốt' in l]
print('   dòng LÓT MÀU:', i_lotmau, '| dòng BỘT BỤI:', i_bot, '| dòng LÓT TRONG:', i_lottrong)
print('   vị trí bột bụi ĐÚNG (sau lót màu, trước lót trong):',
      bool(i_bot and i_lotmau and i_lottrong and min(i_lotmau) < min(i_bot) < min(i_lottrong)))
print('   chỉ 1 phương án (không có bảng nhánh 2):', ('HAI NHÁNH' not in t) and ('NHÁNH 2' not in t))

print()
print('=== 2. Nội dung bắt buộc ===')
for k, mo in [('4B', 'test cắt ca-rô 4B/5B'), ('12–24', 'khô đóng gói'), ('QT_PG_07', 'đối chiếu quy trình chuẩn công ty'),
              ('Cerused', 'hiệu ứng Cerused/Limed'), ('Bột lau', 'công thức bột lau (truy vết)'), ('id 608', 'dẫn chứng id 608'),
              ('mắt gỗ', 'mắt gỗ'), ('sáng', 'gỗ mộc sáng')]:
    print('   %-12s %s' % (mo, 'có' if k in t else 'THIẾU'))
print('   NC %d lần | 2K %d lần | tên riêng %d' % (t.count('NC'), t.count('2K'),
      sum(t.count(k) for k in ['Trendworld', 'Nguyễn Văn Tươi', 'Bình Thạnh chem', 'Nguyễn Văn Tùng'])))
print('   dòng ảnh trong .md:', 'anh_mau_moi/mau_moi_01.jpg' in t)

EMO = re.compile(r'[\U0001F000-\U0001FAFF\U00002600-\U000027BF\u2190-\u21FF\u2B00-\u2BFF\uFE0F]')
found = sorted(set(EMO.findall(t)))
if found:
    t = EMO.sub('', t)
    t = re.sub(r'[ \t]+\n', '\n', t)
    open(MD, 'w', encoding='utf-8').write(t)
    print('   đã dọn ký hiệu:', found)

subprocess.run([PY, r'C:\Users\admin\AppData\Local\hermes\skills\productivity\markdown-to-docx\scripts\md2docx.py', MD, DOCX, 'full'],
               capture_output=True, text=True, encoding='utf-8', errors='replace', cwd=D)
d = Document(DOCX)
for s in ['Heading 1', 'Heading 2', 'Heading 3', 'Heading 4']:
    try:
        d.styles[s].font.color.rgb = RGBColor(0, 0, 0)
    except Exception:
        pass
d.save(DOCX)
d = Document(DOCX)
txt = '\n'.join(x.text for x in d.paragraphs)
for tb in d.tables:
    for r in tb.rows:
        for cc in r.cells:
            txt += '\n' + cc.text
media = [n for n in zipfile.ZipFile(DOCX).namelist() if n.startswith('word/media/')]
print()
print('   DOCX %d byte | đoạn %d | bảng %d | ảnh %d %s | emoji %d | H1 %s'
      % (os.path.getsize(DOCX), len(d.paragraphs), len(d.tables), len(d.inline_shapes), media,
         len(EMO.findall(txt)), d.styles['Heading 1'].font.color.rgb))
print('   bảng dòng:', [len(x.rows) for x in d.tables])
out = os.path.join(os.environ['LOCALAPPDATA'], 'hermes', 'cache', 'gui_duan_a')
os.makedirs(out, exist_ok=True)
shutil.copy2(DOCX, out)
print('   bản gửi:', os.path.join(out, os.path.basename(DOCX)), os.path.getsize(os.path.join(out, os.path.basename(DOCX))), 'byte')
