# -*- coding: utf-8 -*-
"""Kiem chung + xuat CHI MUC doc duoc cho CSDL du an A."""
import os, re, sqlite3, unicodedata

D = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
DB = os.path.join(D, 'CSDLA.db')
con = sqlite3.connect(DB)
c = con.cursor()

print('=== 1. buoc_chuan (5 dong dau) ===')
for r in c.execute('select so, ten_vi, ten_en, ten_zh, substr(dinh_nghia_vi,1,60) from buoc_chuan limit 5'):
    print('  ', r)

print()
print('=== 2. mau ban ghi quy_trinh (moi loai 1) ===')
for loai in ['chuẩn', 'thực tế (QC)', 'nghiên cứu (R&D)', 'KPH (điều chỉnh quy trình)']:
    r = c.execute("select id, ten, khach_hang, he_son, ma_mau, so_buoc, substr(mo_ta,1,180), substr(nguon,1,90) from quy_trinh where loai=? limit 1", (loai,)).fetchone()
    print('  [%s]' % loai)
    print('     id%s | %s | khach=%s | he=%s | ma=%s | so_buoc=%s' % (r[0], r[1][:90], r[2], r[3], r[4], r[5]))
    print('     mo_ta:', (r[6] or '').replace('\n', ' ')[:170])
    print('     nguon:', r[7])

print()
print('=== 3. dem theo he son / ma mau ===')
print('  he_son:', c.execute("select he_son, count(*) from quy_trinh group by he_son order by 2 desc limit 8").fetchall())
print('  top ma mau:', c.execute("select ma_mau, count(*) from quy_trinh where ma_mau is not null group by ma_mau order by 2 desc limit 10").fetchall())

print()
print('=== 4. danh_muc_mau (10 dong dau) ===')
print(' ', [r[0] for r in c.execute('select ma_mau from danh_muc_mau limit 10')])

print()
print('=== 5. buoc_quy_trinh (5 dong dau) ===')
for r in c.execute('select quy_trinh_id, thu_tu, substr(buoc_nguyen_van,1,110) from buoc_quy_trinh limit 5'):
    print('  ', r)

# ---------- xuat CHI MUC ----------
NM = {}
try:
    import sqlite3 as _s
    _c = _s.connect(r'C:\c\deepseek-harness\claw2-db\btchem.db')
    NM = dict(_c.execute('select id, ten from nha_may'))
    _c.close()
except Exception:
    pass

L = ['# CSDL DỰ ÁN A — QUY TRÌNH SƠN ĐỒ GỖ NỘI THẤT & PHONG CÁCH ĐỒ GỖ', '']
L.append('Cơ sở dữ liệu: `CSDLA.db` (SQLite) trong thư mục dự án A — thu thập từ HỆ DỮ LIỆU BT Chem.')
L.append('Ngày quét: %s' % c.execute('select max(ngay_quet) from nguon_quet').fetchone()[0])
L.append('')
L.append('## 1. Bảy bảng')
L.append('')
L.append('| Bảng | Nội dung | Số dòng |')
L.append('|---|---|---:|')
for t, nd in [('buoc_chuan', 'Bộ 24 bước chuẩn Step Finish (Việt/Anh/Trung + định nghĩa)'),
              ('quy_trinh', 'Các quy trình sơn tìm được (chuẩn · thực tế QC · R&D · KPH)'),
              ('buoc_quy_trinh', 'Từng bước/câu trong mỗi quy trình'),
              ('phong_cach', 'Phong cách đồ gỗ + các bước đặc trưng'),
              ('cong_thuc', 'Công thức sản phẩm sơn phun (danh mục)'),
              ('danh_muc_mau', 'Mã màu dùng nhiều cho Glaze & Duro Stain'),
              ('nguon_quet', 'Nhật ký nguồn đã quét')]:
    L.append('| `%s` | %s | %d |' % (t, nd, c.execute('select count(*) from %s' % t).fetchone()[0]))
L.append('')
L.append('## 2. Quy trình theo loại nguồn')
L.append('')
L.append('| Loại | Số bản ghi | Nguồn |')
L.append('|---|---:|---|')
SRC = {'chuẩn': 'Bộ định nghĩa 24 bước (chủ dự án cung cấp)',
       'thực tế (QC)': 'Locqc.md + Tri qc.md — báo cáo QC hằng ngày',
       'nghiên cứu (R&D)': 'TONGHOPNGHIENCUU\\Cong thuc & quy trinh — quy trình Hardwax Oil',
       'KPH (điều chỉnh quy trình)': 'btchem_kph.db — ho_so_kph (vụ khiếu nại có nội dung quy trình)'}
for loai, n in c.execute('select loai, count(*) from quy_trinh group by loai order by 2 desc').fetchall():
    L.append('| %s | %d | %s |' % (loai, n, SRC.get(loai, '')))
L.append('')
L.append('## 3. Danh sách quy trình đã thu thập')
L.append('')
L.append('| # | Quy trình | Loại | Khách hàng (nguồn) | Hệ sơn | Mã màu | Số bước nhận diện | Nguồn |')
L.append('|---:|---|---|---|---|---|---:|---|')
for r in c.execute('''select q.id, q.ten, q.loai, q.khach_hang, q.he_son, q.ma_mau, q.so_buoc, q.nguon, q.nha_may_id
                      from quy_trinh q order by q.loai, q.id'''):
    L.append('| %d | %s | %s | %s | %s | %s | %s | %s |' % (
        r[0], (r[1] or '').replace('|', '/')[:110], r[2] or '', r[3] or NM.get(r[8], ''), r[4] or '', r[5] or '', r[6] or '', (r[7] or '').replace('|', '/')[:90]))
L.append('')
L.append('## 4. Phong cách đồ gỗ (kèm bước đặc trưng)')
L.append('')
L.append('| Phong cách | Đặc điểm | Bước đặc trưng (theo bộ 34 bước (24 bước gốc + 10 bước bổ sung 05/10/2026)) | Nguồn |')
L.append('|---|---|---|---|')
for r in c.execute('select ten, dac_diem, buoc_dac_trung, nguon from phong_cach'):
    L.append('| %s | %s | %s | %s |' % (r[0], (r[1] or '').replace('|', '/'), (r[2] or '').replace('|', '/'), (r[3] or '').replace('|', '/')[:110]))
L.append('')
L.append('## 5. Nguồn đã quét + phần CHƯA quét')
L.append('')
for r in c.execute('select nguon, loai, so_ban_ghi, ghi_chu from nguon_quet'):
    L.append('- **%s** — %s bản ghi · %s · `%s`' % (r[1], r[2], r[3], (r[0] or '')[:150]))
L.append('')
L.append('**Chưa quét (ghi để lần sau):** ảnh/phiếu quy trình dạng ảnh trong `QC\\images\\` (chưa OCR) · '
         'portal KPH HTML + các portal tuần (mới lấy qua API tìm kiếm) · bộ tài liệu ngành `KIENTHUCKHOAHOC` (25 PDF tiếng Anh) · '
         '`Hệ nước` / `PreCat NC` / `PHUGIA` (báo cáo mẫu, chưa tách bước) · danh mục màu theo khách trong bảng `mau_lam` của CSDL chính.')
L.append('')
L.append('*Ghi chú: mọi số liệu lấy nguyên từ nguồn; chỗ suy luận (hệ sơn, mã màu, phong cách) đã ghi rõ nguồn ở cột cuối.*')

out = os.path.join(D, 'CSDL_du-an-A.md')
open(out, 'w', encoding='utf-8').write('\n'.join(L))
print()
print('da ghi chi muc:', out, os.path.getsize(out), 'byte |', len(L), 'dong')
con.close()
