# -*- coding: utf-8 -*-
"""Chuẩn bị LÔ 10: (1) thư mục ảnh riêng, (2) gói kiến thức CSDL B (màu DYE), (3) gói bổ sung CSDL A (QT 112/116/118 + 34 bước),
   (4) 2 file yêu cầu cho AGY (bước 1: phân tích MÀU bằng model mạnh; bước 2: áp CSDL A + B → quy trình + công thức pha màu DYE)."""
import os, shutil, sqlite3, io, json

DIR = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
ANH09 = os.path.join(DIR, 'anh_mau_moi')
ANH10 = os.path.join(DIR, 'lo10-0710', 'anh_mau')
CSDLB = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\CSDLB.db'
CSDLA = os.path.join(DIR, 'CSDLA.db')
os.makedirs(ANH10, exist_ok=True)

# 1) ảnh
for f in os.listdir(ANH09):
    if f.lower().endswith(('.jpg', '.txt')) and not f.startswith('_anh'):
        shutil.copy2(os.path.join(ANH09, f), os.path.join(ANH10, f))
print('ảnh lô 10:', sorted(os.listdir(ANH10)))

# 2) gói kiến thức CSDL B — màu DYE
b = sqlite3.connect('file:%s?mode=ro' % CSDLB.replace('\\', '/'), uri=True)
L = ['# CSDL B — GÓI MÀU DYE (dùng cho công thức pha màu stain)',
     '',
     '> Nguồn: `CSDLB.db` (bảng `mau` = danh mục 26 mã; bảng `mau_bang_in` = bảng màu in có SỐ ĐO hex/L*a*b* do CODE đo pixel).',
     '> Quy ước: ô DYE = màu nhuộm trong (dye) — ngấm vào thớ gỗ, KHÔNG đọng bột màu ở ghim sớ; ô PIGMENT = màu phủ (pigment).',
     '']
L.append('## 1. 45 ô màu DYE đã đo (màu · nồng độ · hex · L* · a* · b* · độ tin cậy)')
L.append('| Màu (nguyên văn) | Nồng độ % | Hex | L* | a* | b* | Tin cậy |')
L.append('|---|---|---|---|---|---|---|')
for r in b.execute("""SELECT ma_mau, nong_do, hex, L_star, a_star, b_star, do_tin_cay FROM mau_bang_in
                      WHERE nhom='DYE' ORDER BY ma_mau, nong_do"""):
    L.append('| %s | %s | %s | %s | %s | %s | %s |' % tuple('—' if x is None else x for x in r))
L.append('')
L.append('## 2. Danh mục mã màu (bảng `mau`) — tồn kho + phân loại + phân tán')
L.append('| Mã | Tên | Nhóm/NCC | Phân loại | Tồn kho (kg) | Ưu tiên | Chất phân tán | Ghi chú |')
L.append('|---|---|---|---|---|---|---|---|')
for r in b.execute('SELECT ma, ten, nhom, phan_loai, ton_kg, uu_tien, phan_tan, ghi_chu FROM mau ORDER BY id'):
    L.append('| %s | %s | %s | %s | %s | %s | %s | %s |' % tuple(
        ('—' if x is None else str(x).replace('|', '/')[:150]) for x in r))
L.append('')
L.append('## 3. Liên kết mã ↔ bảng giá / thực tế')
for r in b.execute('SELECT mau_ten, db, bang, ten_trong_bang, ghi_chu FROM lien_ket_gia'):
    L.append('- **%s** → %s.%s: %s%s' % (r[0], r[1], r[2], r[3], (' (%s)' % r[4]) if r[4] else ''))
L.append('')
L.append('## 4. Chất phân tán (bảng `phan_tan`)')
for r in b.execute('SELECT ten, loai, hang, ghi_chu FROM phan_tan'):
    L.append('- %s | %s | %s | %s' % r)
io.open(os.path.join(DIR, 'CSDLB_GOI_MAU_DYE.md'), 'w', encoding='utf-8').write('\n'.join(L))
print('CSDLB_GOI_MAU_DYE.md:', os.path.getsize(os.path.join(DIR, 'CSDLB_GOI_MAU_DYE.md')), 'byte')

# 3) gói bổ sung CSDL A
a = sqlite3.connect('file:%s?mode=ro' % CSDLA.replace('\\', '/'), uri=True)
A = ['# CSDL A — BỔ SUNG: 34 bước chuẩn + 3 quy trình mốc (112 Walnut DyeStain · 116 chuẩn PA1 · 118 nhánh 2)', '']
A.append('## 34 bước chuẩn (số · tên · định nghĩa rút gọn)')
A.append('| Số | Tên bước | Định nghĩa (rút gọn) |')
A.append('|---|---|---|')
for r in a.execute('SELECT so, ten_vi, dinh_nghia_vi FROM buoc_chuan ORDER BY so'):
    A.append('| %s | %s | %s |' % (r[0], r[1], (r[2] or '').replace('|', '/')[:220]))
A.append('')
for qid in (112, 116, 118):
    t = a.execute('SELECT ten, mo_ta FROM quy_trinh WHERE id=?', (qid,)).fetchone()
    A.append('## Quy trình %d — %s' % (qid, t[0]))
    A.append('*Mô tả:* %s' % t[1])
    A.append('| TT | Bước nguyên văn | Bước chuẩn | Ghi chú |')
    A.append('|---|---|---|---|')
    for r in a.execute('SELECT thu_tu, buoc_nguyen_van, buoc_chuan_so, ghi_chu FROM buoc_quy_trinh WHERE quy_trinh_id=? ORDER BY thu_tu', (qid,)):
        A.append('| %s | %s | %s | %s |' % (r[0], (r[1] or '').replace('|', '/'), r[2] or '—', (r[3] or '—').replace('|', '/')[:120]))
    A.append('')
A.append('## 28 luật huấn luyện chủ dự án (nguyên văn — xem đầy đủ trong CSDLA_KIEN_THUC_HUAN_LUYEN.md)')
for r in a.execute('SELECT ngay, nhom, quy_tac FROM huan_luyen ORDER BY id'):
    A.append('- **[%s]** %s' % (r[1] or 'luật', r[2] or ''))
io.open(os.path.join(DIR, 'CSDLA_BOSUNG_QT_MOC.md'), 'w', encoding='utf-8').write('\n'.join(A))
print('CSDLA_BOSUNG_QT_MOC.md:', os.path.getsize(os.path.join(DIR, 'CSDLA_BOSUNG_QT_MOC.md')), 'byte')

# 4) hai file yêu cầu
io.open(os.path.join(DIR, 'YEU_CAU_L010_B1_phan_tich_mau.txt'), 'w', encoding='utf-8').write('''NHIỆM VỤ BƯỚC 1 — PHÂN TÍCH MÀU (chỉ phân tích, KHÔNG viết quy trình)

Đầu vào (thư mục lo10-0710\\anh_mau\\):
- moc_01.jpg  = ẢNH GỖ MỘC (phôi chưa sơn)
- mau_01.jpg  = ẢNH MẪU ĐÃ LÊN MÀU (thành phẩm cần đạt)
- zoom_1..8   = 8 ô zoom vi mô của mẫu màu
- _zoom_do_mau.txt = số đo màu (RGB/hex/L*a*b* + SD) do máy đo pixel — dùng đúng số này, KHÔNG tự bịa số mới.

Hãy đọc TOÀN BỘ 8 ô zoom + file số đo, rồi trả lời ĐÚNG các mục sau (đánh số rõ ràng, viết tiếng Việt):

A. GỖ MỘC (moc_01.jpg)
   1. Loài gỗ/loại phôi (nêu độ chắc chắn %), cách cắt vân (vân thẳng/đám vân), mạch gỗ mở hay đóng.
   2. Màu gỗ mộc: L*a*b* (đọc từ ảnh + đối chiếu số đo), độ sáng, tông.
   3. Khả năng hút màu: mức độ mao quản/ghim sớ, nguy cơ lên màu không đều (loang, đốm, cháy cạnh).

B. MẪU ĐÃ LÊN MÀU (mau_01.jpg + 8 ô zoom)
   4. Màu đích: L*a*b* vùng màu THỰC (bỏ vùng chóa sáng và băng keo), tông màu (nâu gì), độ sâu, độ ấm.
   5. Tương phản vân: giữa vùng sáng (thịt gỗ) và vùng tối (ghim sớ/thớ sẫm) chênh bao nhiêu L*; vân có bị lấp hay còn rõ chiều sâu.
   6. Độ bóng bề mặt (ước lượng GU theo mức phản chiếu) và độ mở của ghim sớ sau khi sơn.

C. KẾT LUẬN KỸ THUẬT MÀU (đây là phần quan trọng nhất)
   7. Màu này là **DYE (nhuộm trong)** hay **PIGMENT (màu phủ)**, hay **DYE + PIGMENT**? Nêu CĂN CỨ nhìn thấy được: màu có trong/ngấm vào thớ không, ghim sớ có đọng bột màu trắng/đục không, màu sẫm lên là do tăng nồng độ màu trong (không bị xám/bạc), vân gỗ có còn trong không. Cho độ chắc chắn % cho từng khả năng.
   8. Nếu dùng DYE làm lớp chính (stain), cần tông dye gì để ra đúng màu đích (nêu tên tông: nâu đỏ ấm / nâu vàng / nâu khói...), và có cần thêm một lượng nhỏ PIGMENT (oxit) để chỉnh độ đục/độ phủ không — nếu có thì cho biết VAI TRÒ (không cần nêu mã).

D. YÊU CẦU KỸ THUẬT ĐỂ ĐẠT MẪU
   9. Liệt kê 5–7 yêu cầu kỹ thuật bắt buộc (về màu, về độ sâu vân, về xử lý bề mặt mộc, về kiểm soát loang) — KHÔNG viết quy trình, KHÔNG nêu tên thương mại.

GHI KẾT QUẢ vào đúng 1 file: lo10-0710\\PHAN_TICH_MAU_L010.md
Cuối file ghi dòng "HOAN TAT".
''')
io.open(os.path.join(DIR, 'YEU_CAU_L010_B2_quytrinh_congthuc.txt'), 'w', encoding='utf-8').write('''NHIỆM VỤ BƯỚC 2 — RA QUY TRÌNH + CÔNG THỨC PHA MÀU

Đầu vào:
- lo10-0710\\PHAN_TICH_MAU_L010.md  = kết quả BƯỚC 1 (phân tích màu) — phải tuân theo kết luận ở đó.
- CSDLA_KIEN_THUC_HUAN_LUYEN.md    = 28 luật huấn luyện của chủ dự án + 2 quy trình chuẩn đã được duyệt.
- CSDLA_BOSUNG_QT_MOC.md           = 34 bước chuẩn + 3 quy trình mốc: 112 (Walnut DyeStain), 116 (chuẩn chung PA1), 118 (nhánh 2 ghim sớ tương phản).
- CSDLB_GOI_MAU_DYE.md             = 45 ô màu DYE ĐÃ ĐO (hex/L*a*b*) + danh mục 26 mã (tồn kho, phân tán) + liên kết giá.
- lo10-0710\\anh_mau\\_zoom_do_mau.txt = số đo màu của mẫu.

YÊU CẦU ĐẦU RA — CHỈ 2 PHẦN, GỌN, KHÔNG LAN MAN (bỏ mọi phân tích lại, bỏ truy xuất nguồn, bỏ ghi chú nội bộ):

PHẦN 1 — QUY TRÌNH SƠN (1 bảng, tối đa 9 dòng, CHỈ các công đoạn PHỦ SƠN)
- Cột: TT | Bước (số + tên bước chuẩn) | Loại màu (MÀU TRONG SUỐT / MÀU CÓ MÀU (PIGMENTED) / KHÔNG MÀU / KHÁC) | Vật liệu (mô tả chung, KHÔNG nêu tên thương mại, KHÔNG nêu mã sản phẩm) | Tỉ lệ pha | Thi công | Thời gian khô | Nhám.
- ⛔ TUYỆT ĐỐI KHÔNG ghi hệ sơn (NC/PU/nước/UV/2K) ở bất cứ đâu.
- Chọn chuẩn theo mẫu: mẫu ĐỀU MỘT TÔNG → chuẩn chung id 116; mẫu có GHIM SỚ/vân TƯƠNG PHẢN rõ → nhánh 2 id 118. Nếu mẫu là walnut/vân thẳng có lớp NHUỘM màu (DYE STAIN) thì lấy mốc quy trình 112 (nhuộm dye → lót trong → chà nhám → lót lần 2 → chà nhám → phủ hoàn thiện) làm xương sống, rồi bổ sung theo 116/118 nếu cần.
- BẮT BUỘC có dòng "KIỂM TRA MÀU — DẶM MÀU NẾU LÁC" ngay SAU MỖI lần chà nhám.

PHẦN 2 — CÔNG THỨC PHA MÀU (phần này là trọng tâm, chủ yếu là DYE)
- 2.1 Bảng công thức (4–6 dòng): Mã màu (đúng mã có trong CSDL B) | Tỉ lệ tính theo % khối lượng màu trong hỗn hợp màu | Vai trò trong công thức | Ghi chú (nồng độ màu trong dung dịch stain, mức độ ảnh hưởng).
  · ƯU TIÊN màu **DYE** (nhuộm trong) làm lớp chính; chỉ thêm PIGMENT/oxit khi thật cần để chỉnh độ phủ/độ đục — nếu dùng phải ghi rõ lý do.
  · CHỈ dùng mã có trong CSDL B; ưu tiên mã có TỒN KHO hoặc đã có tài liệu; nếu mã quan trọng mà chưa có tồn kho thì ghi chú rõ.
- 2.2 Cách pha: dung môi/pha loãng, thứ tự cho màu vào, khuấy/lọc, nồng độ tổng (% màu trong dung dịch), thời gian dùng trong bao lâu.
- 2.3 Bảng căn chỉnh (4 dòng): "Nếu mẫu bị … → tăng/giảm màu nào bao nhiêu %".
- 2.4 Ba ô thử bắt buộc trước khi chạy chuyền: nêu rõ pha ở 3 mức nồng độ và tiêu chí đánh giá (màu, độ sâu vân, độ trong).

KHÔNG viết thêm mục nào khác. Viết tiếng Việt, gọn, dạng bảng. Ghi kết quả vào đúng 1 file: lo10-0710\\QUY_TRINH_VA_CONG_THUC_PHA_MAU_L010.md
Cuối file ghi dòng "HOAN TAT".
''')
print('2 file yêu cầu: OK')
for f in sorted(os.listdir(os.path.join(DIR, 'lo10-0710'))):
    print('   lo10-0710/' + f)
