# -*- coding: utf-8 -*-
"""HLQT — dựng GÓI KIẾN THỨC CSDL A để AGY đọc khi đề nghị quy trình.
Gồm: bộ 34 bước chuẩn · 29+ luật huấn luyện · DANH MỤC 118 quy trình kèm chuỗi bước (đã map bước chuẩn)
     · danh mục màu · phong cách.
Xuất: HLQT-app/kien_thuc/CSDLA_GOI_CHO_AGY.md
Chạy lại sau mỗi lần bổ sung CSDL A."""
import os, sqlite3, time

GOC = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
DB = os.path.join(GOC, 'CSDLA.db')
OUT = os.path.join(GOC, 'HLQT-app', 'kien_thuc', 'CSDLA_GOI_CHO_AGY.md')
os.makedirs(os.path.dirname(OUT), exist_ok=True)

con = sqlite3.connect(DB)
c = con.cursor()
L = []
W = L.append
W('# GÓI KIẾN THỨC CSDL A CHO AGY — cập nhật %s' % time.strftime('%d/%m/%Y %H:%M'))
W('')
W('> Dùng để: đọc MỘT BẢN MÀU (ảnh) → chọn **đúng MỘT quy trình** trong danh mục dưới đây là khả dĩ và sát nhất,')
W('> hoặc ghép/điều chỉnh từ các quy trình đó; rồi đối chiếu với quy trình chủ nhân nhập để đề xuất bổ sung.')
W('> Luật bắt buộc: ẨN DANH — không ghi tên khách hàng, không ghi tên kỹ thuật viên; chỉ dùng mã màu + loại nền.')
W('')

W('## PHẦN 1 — BỘ %d BƯỚC CHUẨN (đánh số để tham chiếu)' % c.execute('SELECT COUNT(*) FROM buoc_chuan').fetchone()[0])
W('| Số | Tên bước (VI) | Tên (EN) | Định nghĩa |')
W('|---|---|---|---|')
for r in c.execute('SELECT so,ten_vi,ten_en,dinh_nghia_vi FROM buoc_chuan ORDER BY so'):
    W('| %s | %s | %s | %s |' % tuple((str(x or '').replace('|', '/')[:220]) for x in r))
W('')

W('## PHẦN 2 — LUẬT ĐÃ HUẤN LUYỆN (%d luật — trạng thái ĐANG ÁP DỤNG)' % c.execute('SELECT COUNT(*) FROM huan_luyen').fetchone()[0])
W('| # | Nhóm | Quy tắc (áp dụng) | Phạm vi | Trạng thái |')
W('|---|---|---|---|---|')
for r in c.execute('SELECT id,nhom,quy_tac,pham_vi,trang_thai FROM huan_luyen ORDER BY id'):
    W('| %s | %s | %s | %s | %s |' % tuple((str(x or '').replace('|', '/')[:400]) for x in r))
W('')

W('## PHẦN 3 — DANH MỤC QUY TRÌNH TRONG CSDL A (%d quy trình)' % c.execute('SELECT COUNT(*) FROM quy_trinh').fetchone()[0])
W('Mỗi mục: **id** · tên · loại · hệ sơn · mã màu · nguồn · và CHUỖI BƯỚC (số bước chuẩn + nội dung nguyên văn rút gọn).')
W('')
n_buoc_tong = 0
for qt in c.execute('SELECT id,ten,loai,he_son,ma_mau,so_buoc,mo_ta,nguon,ghi_chu FROM quy_trinh ORDER BY id').fetchall():
    qid, ten, loai, he, ma, sb, mo_ta, nguon, gc = qt
    buoc = c.execute('SELECT thu_tu,buoc_chuan_so,buoc_nguyen_van FROM buoc_quy_trinh WHERE quy_trinh_id=? ORDER BY thu_tu', (qid,)).fetchall()
    W('### QT id %s — %s' % (qid, str(ten or '')[:160]))
    W('- loại: %s | hệ sơn: %s | mã màu: %s | số bước ghi: %s | số bước chi tiết: %d' % (loai or '—', he or '—', ma or '—', sb or '—', len(buoc)))
    if mo_ta:
        W('- mô tả: %s' % str(mo_ta).replace('\n', ' ')[:400])
    if nguon:
        W('- nguồn: %s' % str(nguon).replace('\n', ' ')[:200])
    if gc:
        W('- ghi chú: %s' % str(gc).replace('\n', ' ')[:200])
    if buoc:
        for t, so, nd in buoc:
            n_buoc_tong += 1
            W('  %s. [bước chuẩn %s] %s' % (t, so if so else '—', str(nd or '').replace('\n', ' ')[:300]))
    W('')

W('## PHẦN 4 — DANH MỤC MÀU & PHONG CÁCH')
W('| Mã màu | Khách hàng | Ghi chú | Nguồn ảnh |')
W('|---|---|---|---|')
for r in c.execute('SELECT ma_mau,khach_hang,ghi_chu,nguon FROM danh_muc_mau ORDER BY id'):
    W('| %s | %s | %s | %s |' % tuple((str(x or '').replace('|', '/')[:120]) for x in r))
W('')
W('| Phong cách | Đặc điểm | Bước đặc trưng |')
W('|---|---|---|')
for r in c.execute('SELECT ten,dac_diem,buoc_dac_trung FROM phong_cach ORDER BY id'):
    W('| %s | %s | %s |' % tuple((str(x or '').replace('|', '/')[:200]) for x in r))
W('')

W('## PHẦN 5 — HƯỚNG DẪN ĐỌC ẢNH BẢN MÀU')
W('- Chỉ lấy vùng màng sơn thật; KHÔNG lấy nền giấy, vùng lóe sáng, bóng đổ.')
W('- Nêu rõ dấu hiệu: vân gỗ còn/lấp, độ trong/đục, tông màu (sáng–tối), độ bóng (mờ/bán bóng/bóng),')
W('  hiệu ứng (giả cổ, sọc glaze, highlight, tối cạnh), có lộ mộc/mài mòn không, có khuyết tật không.')
W('- Nếu ảnh không đủ để kết luận thì ghi rõ "không xác định được" — KHÔNG suy diễn.')
W('')
W('*(Gói này dựng tự động từ CSDL A: %d bước chuẩn · %d quy trình · %d dòng bước chi tiết · %d luật.)*'
  % (c.execute('SELECT COUNT(*) FROM buoc_chuan').fetchone()[0], c.execute('SELECT COUNT(*) FROM quy_trinh').fetchone()[0],
     n_buoc_tong, c.execute('SELECT COUNT(*) FROM huan_luyen').fetchone()[0]))

open(OUT, 'w', encoding='utf-8').write('\n'.join(L))
print('ĐÃ DỰNG GÓI KIẾN THỨC HLQT:', OUT)
print('  %d ký tự · %d dòng' % (os.path.getsize(OUT), len(L)))
print('  quy trình: %d · dòng bước: %d · luật: %d' % (c.execute('SELECT COUNT(*) FROM quy_trinh').fetchone()[0], n_buoc_tong,
                                                     c.execute('SELECT COUNT(*) FROM huan_luyen').fetchone()[0]))
con.close()
