# -*- coding: utf-8 -*-
"""LƯU CÁC HUẤN LUYỆN CỦA CHỦ DỰ ÁN vào CSDLA.db (bảng mới `huan_luyen`) + ghi KỸ THUẬT CHUẨN = PHƯƠNG ÁN 1.

- backup CSDLA trước khi ghi
- tạo bảng `huan_luyen` (id, ngay, nhom, nguyen_van, quy_tac, pham_vi, trang_thai, nguon, ghi_chu)
- thêm 1 dòng `quy_trinh` + 8 dòng `buoc_quy_trinh` cho KỸ THUẬT CHUẨN (PA 1, lô 05) và liên kết trong huan_luyen
- chỉ THÊM, không sửa/xoá dữ liệu cũ
"""
import os, shutil, sqlite3, time

D = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
DB = os.path.join(D, 'CSDLA.db')
NGAY = time.strftime('%Y-%m-%d')

ts = time.strftime('%Y%m%d_%H%M%S')
bak = os.path.join(D, '_backup_CSDLA_truoc_huan_luyen_%s.db' % ts)
shutil.copy2(DB, bak)
print('backup:', os.path.basename(bak), os.path.getsize(bak), 'byte')

c = sqlite3.connect(DB)
truoc = {t: c.execute('select count(*) from %s' % t).fetchone()[0]
         for t in ['buoc_chuan', 'quy_trinh', 'buoc_quy_trinh', 'phong_cach', 'cong_thuc', 'danh_muc_mau', 'nguon_quet']}
print('trước:', truoc)

c.execute("""create table if not exists huan_luyen (
    id integer primary key autoincrement,
    ngay text, nhom text, nguyen_van text, quy_tac text, pham_vi text,
    trang_thai text, nguon text, ghi_chu text)""")

N = 'Chủ dự án (anh Minh) — chốt trực tiếp'
HL = [
    # (nhóm, nguyên văn, quy tắc chuẩn hoá, phạm vi, ghi chú)
    ('Quy trình chuẩn', '“Kỹ thuật chuẩn vẫn là phương án 1 nhé.”',
     'THỨ TỰ CHUẨN: nhuộm nền (B5) → LÓT MỎNG/WASHCOAT (B19, 10–12 s, màng 40–50 µm) → kiểm tra–dặm màu, KHÔNG chà nhám (B6) → LAU MÀU pha loãng cho màu chui vào ghim sớ (B9) → khoá lót trong ≥100–120 µm (B20) → chà nhám giữa lớp (B33) → kiểm tra–dặm màu (B7) → bóng mờ 10 % (B21).',
     'Mọi đề xuất quy trình sơn (PA 1 = khuyến nghị)', 'ĐANG ÁP DỤNG', N,
     'Chốt 06/10/2026 cùng lô mẫu 05; đã ghi thành quy trình id trong bảng quy_trinh.'),
    ('Kỹ thuật màu', '“Việc lau màu có thể sử dụng glaze pha với màu và pha loãng ra để lau.”',
     'Bước LAU MÀU (B9) dùng GLAZE NỀN pha TINH MÀU rồi pha loãng (thử 100 : 3–8 + dung môi bay hơi chậm tới ~10–12 s), miết theo chiều thớ cho màu chui vào ghim sớ, lau sạch mặt thịt; dùng hết trong 2–3 giờ.',
     'Cách pha màu cho bước lau màu', 'ĐANG ÁP DỤNG', N, 'Tỉ lệ 100 : 3–8 là tỉ lệ đề nghị thử — chờ chủ dự án xác nhận tỉ lệ/dung môi thực tế.'),
    ('Kỹ thuật màu', '“Khi lau glaze màu, bề mặt lót phải tương đối khô hoàn toàn và không được giải nhám xước vì màu sẽ chui xuống các vết sắt nhám hoặc là thấm xuống rãnh sơn chịu khô sẽ làm thâm màu.”',
     'TRƯỚC KHI LAU GLAZE MÀU: (1) bề mặt lót KHÔ TƯƠNG ĐỐI HOÀN TOÀN; (2) KHÔNG xả nhám/gây xước mặt lót (màu chui xuống vết nhám ⇒ THÂM MÀU); (3) KHÔNG để sơn chịu khô (dry spray)/rãnh sơn khô (⇒ thâm màu); (4) nếu buộc xả nhám: nhám rất mịn + xả cực nhẹ, thổi bụi + lau tack. ⇒ Bước chà nhám phải đặt SAU lớp khoá lót trong (B20).',
     'Kỹ thuật lau màu/glaze', 'ĐANG ÁP DỤNG', N, 'Khớp ghi chú chuẩn công ty id 111: “chú ý không chà xước lẹm bay mất màu”.'),
    ('Kỹ thuật màu', '“Luôn yêu cầu AGY zoom hình lên phân tích màu sắc trên từng phần của hình, ít nhất là 5 điểm trên hình để nhận ra được hiệu ứng màu…”',
     'BẮT BUỘC zoom ≥ 5 điểm/ảnh trước khi kết luận hiệu ứng. Dấu hiệu phân biệt: STAIN MÀU = nhuộm đều trên nền gỗ; LAU MÀU = thấm đậm hơn nhưng kém đều ⇒ phải có LÓT LỎNG (washcoat) trước để không bị đốm; LAU GLAZE LỎNG = bôi đen đều trên nền lót + để lại màu trong ghim sớ (khá giống Duro stain); DURO STAIN = chỉ đậm ở vân/mạch, mặt phẳng sạch.',
     'Phân tích ảnh mẫu (nội bộ) → chọn kỹ thuật', 'ĐANG ÁP DỤNG', N, 'Đã hỗ trợ bằng script cắt ô zoom + đo màu sẵn (tao_zoom.py, _zoom_do_mau.txt).'),
    ('Kỹ thuật màu', '“Sao không dùng lót màu đen rồi chà light” / “vấn đề là glaze độ bám dính kém…”',
     'Với hiệu ứng tối/2 tông: ưu tiên LÓT MÀU + CHÀ LIGHT/CHÀ MÒN thay cho lau glaze (glaze bám dính cơ học yếu, dễ tróc khi cắt ca-rô).',
     'Hiệu ứng tối/giả cổ', 'ĐANG ÁP DỤNG', N, 'Bằng chứng trong CSDLA: tróc 12/12 vị trí và cả 4 phương án công thức glaze không đạt.'),
    ('Kỹ thuật màu', '“Chỉ chọn nhánh 1.”',
     'Giữ hiệu ứng trắng ghim sớ (Cerused/Limed) ⇒ dùng BƯỚC 11 LAU BỘT BỤI (bột lau + màu trắng), đặt sau lót màu nền và trước lớp lót trong; bắt buộc test ca-rô tại giao diện này.',
     'Hiệu ứng trắng ghim sớ', 'ĐANG ÁP DỤNG', N, 'Bản chốt lô 04 (gỗ tối có mắt gỗ).'),
    ('Kỹ thuật màu', '“các bước chà nhám luôn có thể làm lác (mất màu) của lớp trước đó nên trước các công đoạn sơn phủ thường phải kiểm tra màu và dặm màu nếu cần.”',
     'Sau MỖI lần chà nhám, TRƯỚC công đoạn sơn phủ kế tiếp: KIỂM TRA MÀU dưới đèn + DẶM MÀU nếu lác (B6 dặm sương màu loãng hoặc B7 màu PAD).',
     'Mọi quy trình phủ sơn', 'ĐANG ÁP DỤNG', N, 'Thành dòng bắt buộc trong bảng quy trình.'),
    ('Hệ sơn', '“Tôi ko muốn dùng 2 k , chủ yếu là NC.”',
     'Hệ sơn chính là NC (stain NC · lót màu NC · lót NC trong · bóng NC NY). KHÔNG đề xuất 2K trừ khi chủ dự án yêu cầu.',
     'Mọi đề xuất quy trình', 'ĐANG ÁP DỤNG', N, ''),
    ('Dữ liệu nguồn', '“có lót lỏng để không bị đốm” (khi lau màu)',
     'Khi đề xuất LAU MÀU phải ghi kèm lớp LÓT LỎNG/washcoat để chống đốm loang màu.',
     'Kỹ thuật lau màu', 'ĐANG ÁP DỤNG', N, ''),
    ('Trình bày', '“Sau này mô tả ngắn gọn qui trình đề xuất thôi, ko nói dài dòng, tốt nhất đưa ra 2 qui trình đề xuất, và nên có hình mộc gỗ (gỗ chưa sơn).”',
     'Bản đề xuất: NGẮN GỌN, mỗi bước 1 dòng; đưa 2 PHƯƠNG ÁN (PA1 khuyến nghị — PA2 thay thế); kèm ẢNH GỖ MỘC (nếu chưa có thì ghi 1 dòng “THIẾU ẢNH GỖ MỘC”).',
     'Mọi tài liệu gửi đi', 'ĐANG ÁP DỤNG', N, ''),
    ('Trình bày', '“đừng đưa các dữ liệu phân tích hay những thứ ko liên quan vào tài liệu trừ khi được hỏi. Không nhắc đến các vấn đề KPH. tôi chỉ cần các qui trình sơn được đề xuất.”',
     'TÀI LIỆU GỬI ĐI CHỈ GỒM: tiêu đề ngắn + ảnh mẫu (và ảnh gỗ mộc nếu có) + 2 bảng quy trình (≤ 8 dòng/bảng) + 3–5 dòng lưu ý bắt buộc. KHÔNG in phần phân tích màu/zoom/L*a*b*, nhận diện loài gỗ, mảng–khối màu, mục căn cứ–truy vết; KHÔNG nhắc KPH/sự cố.',
     'Mọi tài liệu gửi đi', 'ĐANG ÁP DỤNG', N, 'Phân tích vẫn làm nội bộ để chọn đúng kỹ thuật.'),
    ('Trình bày', '“Chú ý tới qui trình thôi”',
     'Trọng tâm tài liệu là PHẦN QUY TRÌNH; phần phân tích cô đọng, không lan man.',
     'Mọi tài liệu gửi đi', 'ĐANG ÁP DỤNG', N, ''),
    ('Trình bày', '“chèn hình vào luôn”',
     'Mặc định CHÈN ẢNH MẪU vào tài liệu DOCX (dưới tiêu đề, trước phần quy trình).',
     'Mọi tài liệu gửi đi', 'ĐANG ÁP DỤNG', N, ''),
    ('Trình bày', '“chỉ cần ngắn gọn qui trình đề xuất, và ko ghi tên thương mại loại sơn”',
     'Bảng quy trình KHÔNG ghi tên thương mại/mã sản phẩm sơn — chỉ mô tả loại vật liệu chung + tỉ lệ pha/độ nhớt/nhám/thời gian khô/số pass.',
     'Mọi bảng quy trình', 'ĐANG ÁP DỤNG', N, ''),
    ('Trình bày', '“đừng đưa vào quy trình các bước xử lý bề mặt gỗ”',
     'Bảng quy trình CHỈ gồm công đoạn PHỦ SƠN/tạo hiệu ứng; các bước xử lý mộc chỉ gom 1 dòng ghi chú ngoài chuyền phủ.',
     'Mọi bảng quy trình', 'ĐANG ÁP DỤNG', N, ''),
    ('Dữ liệu nguồn', '“bỏ qua các tên gọi riêng của khách và kĩ thuật viên”',
     'CSDLA và tài liệu: KHÔNG lưu tên riêng khách hàng/kỹ thuật viên (ẩn danh).',
     'Dữ liệu dự án A', 'ĐANG ÁP DỤNG', N, ''),
    ('Dữ liệu nguồn', 'Nguyên tắc làm việc đã chốt',
     'CSDLA chỉ GHI THÊM, backup trước mỗi lần ghi; giữ nguyên văn số liệu/nguồn (kể cả lỗi chính tả); ô nào nguồn không ghi thì ghi “nguồn không ghi”, KHÔNG bịa; mọi con số phải kiểm chứng được.',
     'Dữ liệu dự án A', 'ĐANG ÁP DỤNG', N, ''),
]
c.executemany('insert into huan_luyen (ngay, nhom, nguyen_van, quy_tac, pham_vi, trang_thai, nguon, ghi_chu) values (?,?,?,?,?,?,?,?)',
              [(NGAY,) + r for r in HL])
print('\nđã nạp', len(HL), 'huấn luyện vào bảng huan_luyen')

# ---- ghi KỸ THUẬT CHUẨN (PA 1) thành 1 quy trình trong CSDLA ----
BUOC = [
    (5, 'Bước 1: Nhuộm màu nền (stain NC nâu xám tro) — phun 1 pass hoặc lau đều, tỉ lệ 100 : 100–150 dung môi NC, khô 20–30 phút, không nhám'),
    (19, 'Bước 2: Sơn lót mỏng (Washcoat) — lót NC pha rất loãng 100 : 150–200, độ nhớt 10–12 s, phun lướt 1 pass màng ướt 40–50 µm, chờ khô tương đối hoàn toàn'),
    (6, 'Bước 3: KIỂM TRA MÀU — DẶM MÀU NẾU LÁC (KHÔNG chà nhám) — tinh màu pha loãng 100 : 300–400, dặm sương siêu mịn chỗ lác, khô 10–15 phút'),
    (9, 'Bước 4: LAU MÀU — glaze nền pha tinh màu (thử 100 : 3–8) + dung môi bay hơi chậm tới ~10–12 s, miết theo chiều thớ cho màu chui vào ghim sớ, lau sạch mặt thịt, khô 30–45 phút'),
    (20, 'Bước 5: Sơn lót trong (khoá màu) — 100 : 120–140 : 3, độ nhớt 12–14 s, phun caro 2 passes màng ướt ≥ 100–120 µm, khô 1–1,5 giờ, xả #320–400'),
    (33, 'Bước 6: Chà nhám giữa lớp — xốp #400–500 khử hạt bụi lồi (chà SAU khi đã khoá màu)'),
    (7, 'Bước 7: KIỂM TRA MÀU — DẶM MÀU NẾU LÁC (màu PAD) — màu stain lau loãng + vải cotton, dặm mép cạnh, khô 10–15 phút'),
    (21, 'Bước 8: Sơn bóng NC kháng ngả vàng mờ 10 % — 100 : 100–120 : 3, độ nhớt 11–13 s, 2 passes 3 bar, 0,08–0,10 kg/m²; khô bụi 30–45 phút, khô đóng gói 12–24 giờ'),
]
c.execute("""insert into quy_trinh (ten, loai, khach_hang, nha_may_id, he_son, ma_mau, so_buoc, mo_ta, nguon, ngay_tai_lieu, ghi_chu)
             values (?,?,?,?,?,?,?,?,?,?,?)""",
          ('QT_CHUAN_LAU-MAU-WASHCOAT (PA 1 — lô 05, nâu xám tro)', 'Quy trình chuẩn hoá (chủ dự án chốt)', None, None, 'NC',
           'nâu xám tro (taupe)', len(BUOC),
           'Thứ tự chuẩn: nhuộm nền → lót mỏng washcoat → kiểm tra–dặm màu (không chà nhám) → lau màu chui vào ghim sớ → khoá lót trong → chà nhám → kiểm tra–dặm màu → bóng mờ 10 %. Độ bóng mục tiêu 5–15 GU; test cắt ca-rô 4B/5B trước khi chạy chuyền.',
           'DE_XUAT 2 PA lô 05 — quy tắc huan_luyen (chủ dự án chốt 06/10/2026)', NGAY,
           'Chủ dự án chốt: “Kỹ thuật chuẩn vẫn là phương án 1”'))
qid = c.execute('select last_insert_rowid()').fetchone()[0]
for i, (bs, nd) in enumerate(BUOC, 1):
    c.execute('insert into buoc_quy_trinh (quy_trinh_id, thu_tu, buoc_nguyen_van, buoc_chuan_so, ghi_chu) values (?,?,?,?,?)',
              (qid, i, nd, bs, 'Quy trình chuẩn hoá — PA 1 (washcoat + lau màu)'))
c.execute("update huan_luyen set ghi_chu = coalesce(ghi_chu,'') || ? where nhom = 'Quy trình chuẩn'",
          (' | Đã ghi thành quy_trinh id %d (QT_CHUAN_LAU-MAU-WASHCOAT).' % qid,))
c.execute("insert into nguon_quet (nguon, loai, so_ban_ghi, ngay_quet, ghi_chu) values (?,?,?,?,?)",
          ('Huấn luyện chủ dự án (chốt trực tiếp trong trao đổi với trợ lý)', 'Quy tắc làm việc (bảng huan_luyen)',
           len(HL), NGAY, 'Bảng huan_luyen trong CSDLA.db — các quy tắc kỹ thuật/trình bày/hệ sơn chủ dự án đã chốt.'))
c.commit()

sau = {t: c.execute('select count(*) from %s' % t).fetchone()[0]
       for t in ['buoc_chuan', 'quy_trinh', 'buoc_quy_trinh', 'phong_cach', 'cong_thuc', 'danh_muc_mau', 'nguon_quet']}
print('sau :', sau)
print('huan_luyen:', c.execute('select count(*) from huan_luyen').fetchone()[0],
      '| quy trình chuẩn id:', qid, '| bước của nó:', c.execute('select count(*) from buoc_quy_trinh where quy_trinh_id=?', (qid,)).fetchone()[0])
print('tăng: quy_trinh +%d | buoc_quy_trinh +%d | nguon_quet +%d' % (sau['quy_trinh'] - truoc['quy_trinh'],
      sau['buoc_quy_trinh'] - truoc['buoc_quy_trinh'], sau['nguon_quet'] - truoc['nguon_quet']))
print('integrity:', c.execute('pragma integrity_check').fetchone()[0], '| size', os.path.getsize(DB))
print('\n--- huan_luyen theo nhóm ---')
for r in c.execute('select nhom, count(*) from huan_luyen group by nhom order by 2 desc'):
    print('   %-18s %d' % r)
c.close()
