# -*- coding: utf-8 -*-
"""Hoàn tất: copy tài liệu nguồn vào thư mục CSDL B + cập nhật chỉ mục CSDL_du-an-B.md + ghi nhật ký."""
import io, os, shutil, sqlite3

BDIR = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze'
B = os.path.join(BDIR, 'CSDLB.db')
SRC_DOC = r'C:\Claw 2\Nghien cuu\Danh_muc_mau_dung_nhieu_cho_Glaze_va_Duro_Stain_04-10-2026.docx'
NGAY = '2026-10-06'

# copy tài liệu nguồn vào thư mục B (để B tự chứa nguồn)
dst_doc = os.path.join(BDIR, os.path.basename(SRC_DOC))
if os.path.exists(SRC_DOC) and not os.path.exists(dst_doc):
    shutil.copy2(SRC_DOC, dst_doc)
print('đã copy tài liệu nguồn:', os.path.basename(dst_doc), os.path.getsize(dst_doc), 'byte')

cb = sqlite3.connect(B)
cb.row_factory = sqlite3.Row
mau = list(cb.execute('select * from mau order by (uu_tien is null), uu_tien, nhom, ma'))
pt = list(cb.execute('select * from phan_tan order by id'))
lk = list(cb.execute('select * from lien_ket_gia order by db, id'))

L = []
L.append('# CSDL B — DỰ ÁN NGHIÊN CỨU HỆ MÀU STAIN / GLAZE CHO SƠN GỖ')
L.append('')
L.append('**File CSDL:** `CSDLB.db` — thư mục `C:\\Claw 2\\Nghien cuu\\Du-an-B-He-mau-Stain-Glaze\\`')
L.append('**Khởi tạo:** 06/10/2026 · **Cập nhật cuối:** %s' % NGAY)
L.append('')
L.append('## 1. Bảng dữ liệu')
L.append('| Bảng | Số dòng | Nội dung |')
L.append('|---|---|---|')
L.append('| `mau` | **%d** | Danh mục màu/bột màu: nhóm · tên · mã · phân loại · hãng-NCC · **C.I./CAS** · **tồn kho kg** · bền sáng · bền thời tiết · đánh giá sử dụng · **thứ tự ưu tiên chạy mẫu** · trạng thái tài liệu (TDS/SDS/COA) · chất phân tán |' % len(mau))
L.append('| `phan_tan` | %d | Chất phân tán + điểm chờ chốt về “BYK LPN 22836” |' % len(pt))
L.append('| `lien_ket_gia` | %d | Liên kết sang `btchem.db.nguyen_lieu` (10) và `CSDLA.db.danh_muc_mau` (6) |' % len(lk))
L.append('| `nhat_ky` | %d | Nhật ký thay đổi |' % cb.execute('select count(*) from nhat_ky').fetchone()[0])
L.append('')
L.append('## 2. Thứ tự ưu tiên chạy mẫu (theo tài liệu 04/10/2026)')
L.append('| Ưu tiên | Mã | Sản phẩm | C.I./CAS | Tồn kho (kg) |')
L.append('|---|---|---|---|---|')
for r in mau:
    if r['uu_tien']:
        L.append('| %d | %s | %s | %s | %s |' % (r['uu_tien'], r['ma'], r['ten'], r['ci_cas'] or '—', r['ton_kg']))
L.append('')
L.append('## 3. Toàn bộ danh mục trong CSDL B')
L.append('| Nhóm | Mã | Tên | Phân loại | Hãng/NCC | Tài liệu |')
L.append('|---|---|---|---|---|---|')
for r in mau:
    L.append('| %s | %s | %s | %s | %s | %s |' % (r['nhom'] or '—', r['ma'], r['ten'],
                                                   (r['phan_loai'] or '—')[:38], (r['hang_ncc'] or '—')[:38], (r['tai_lieu'] or '—')[:70]))
L.append('')
L.append('## 4. Thư viện tài liệu đứng sau danh mục')
L.append('`C:\\Claw 2\\Nghien cuu\\04-Mau-sac-Dye-Pigment\\MSDS-TDS_OneDrive_02-10-26\\` — **61 tài liệu (~20,4 MB)**: 24 TDS + 36 SDS/MSDS + `Check list _ tồn kho NL màu (đến ngày 02-10-26).xlsx` (nguồn: OneDrive PHÒNG VẬT TƯ, do Bùi Thị Hồng Diễn chia sẻ 02/10/2026).')
L.append('Tài liệu nguồn danh mục: `%s` (đã copy vào thư mục này).' % os.path.basename(SRC_DOC))
L.append('')
L.append('## 5. Việc cần bổ sung (theo tài liệu 04/10/2026)')
for x in ['Bổ sung **COA theo lô** cho các mã ưu tiên (RB 4097/RO 4597, Umber 645, HF4G, MA 100).',
          'Lấy **TDS còn thiếu**: Ferrispec YB-2087, Pigment Brown TB-1008, Carbon 30L, VAP-330M, Red TR 718.',
          'Xác nhận **HIBLACK 30L (Tín Phú)** có đúng là mã **Carbon 30L** đang dùng không.',
          'Đọc toàn văn từng TDS để cập nhật: pigment index, hàm lượng solid, D50/particle size, tỷ trọng, khuyến nghị dung môi/binder.',
          'Đối chiếu nhóm Chromaflo/Neozasol đã có SDS với bảng phân loại dye–pigment 11/09 để chốt nhóm dùng cho **glaze** và **Duro Stain**.']:
    L.append('- ' + x)
L.append('')
L.append('## 6. Điểm đang CHỜ chủ dự án chốt')
L.append('1. **Chất phân tán cho đen oxit sắt**: nguồn ghi 2 chất (BYK 106 và LPN 22836) — “LPN 22836” đang là **tên nhóm** trong bảng giá, chưa phải mã sản phẩm.')
L.append('2. **Ferrispec FP RB-4097** chưa có mã trong CSDL giá (chỉ có Ferrispec FP YB-2087 vàng) — sản phẩm mới hay cùng mã với Iron Oxide RB 4097?')
L.append('3. **Red RO 4597** trong CSDL giá ghi “không mua nữa” — còn dùng không?')
io.open(os.path.join(BDIR, 'CSDL_du-an-B.md'), 'w', encoding='utf-8', newline='').write('\n'.join(L) + '\n')
print('đã cập nhật chỉ mục CSDL_du-an-B.md:', len(L), 'dòng')

cb.execute('insert into nhat_ky (ngay, viec, chi_tiet, nguon) values (?,?,?,?)',
           (NGAY, 'Hoàn tất chuyển danh mục + dọn dữ liệu',
            'CSDL B = %d mã màu (dọn trùng mã YB2087; đặt tên/công ty/tài liệu đầy đủ cho 14 mã mục 8; chuẩn hoá tên Carbon Black MA 100, Carbon 30L). Copy tài liệu nguồn vào thư mục B. Cập nhật chỉ mục.' % len(mau),
            'Lệnh chủ dự án 06/10/2026'))
cb.commit()
print('nhat_ky:', cb.execute('select count(*) from nhat_ky').fetchone()[0], '| integrity:', cb.execute('pragma integrity_check').fetchone()[0])
cb.close()
print()
print('FILE trong thư mục CSDL B:')
for f in sorted(os.listdir(BDIR)):
    print('   %-52s %s byte' % (f, os.path.getsize(os.path.join(BDIR, f))))
