# -*- coding: utf-8 -*-
"""Sửa 3 điểm còn thiếu sau khi chuyển danh mục:
   (a) A: gỡ tiếp tên KTV ở id 28 (PT-011 H cũng còn tên — quy tắc ẩn danh áp cho MỌI dòng);
   (b) B: áp thông tin 10 mã ưu tiên cho MỌI dòng khớp (kể cả các mã không nằm trong A);
   (c) B: xếp lại `nhom` cho các mã mục 8 (Chromaflo / MH / NCC khác) thay vì "(mục 8 – chưa xếp nhóm)".
"""
import os, shutil, sqlite3, time

A = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son\CSDLA.db'
B = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\CSDLB.db'

UU_TIEN = {
    'Umber Pigment 645': dict(ci_cas='P.Br.7; CAS 12713-03-0', ton_kg=950, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Màu nâu đất CHỦ LỰC cho glaze và Duro Stain; hợp tone walnut/teak/antique', uu_tien=1,
        tai_lieu='ĐÃ CÓ: TDS Umber 645 + SDS Umber/Sienna 645. Thiếu: COA theo lô', nhom_muc='Mục 2 – ưu tiên', nhom='NÂU'),
    'Hoover 778 BN': dict(ci_cas='Mixture – blended iron oxide', ton_kg=1150, ben_sang='NCC: lightfast', ben_thoi_tiet='chưa ghi',
        danh_gia='Ưu tiên cao cho stain nâu đậm/Van Dyke; xác nhận độ trong, bền dung môi, tương thích binder', uu_tien=2,
        tai_lieu='ĐÃ CÓ: tài liệu Hoover 778BN. Thiếu: SDS riêng theo mã 778 BN', nhom_muc='Mục 2 – ưu tiên', nhom='NÂU'),
    'Ferrispec FP YB-2087': dict(ci_cas='P.Y.42; CAS 51274', ton_kg=800, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Ưu tiên cho glaze vàng mật ong, oak, teak; kiểm tone & độ trong trên nền gỗ', uu_tien=3,
        tai_lieu='ĐÃ CÓ: SDS Ferrispec YB2087 (VN). Thiếu: TDS riêng YB-2087', nhom_muc='Mục 2 – ưu tiên', nhom='VÀNG'),
    'Iron Oxide RB 4097': dict(ci_cas='P.R.101; CAS 1309-37-1', ton_kg=200, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Rất phù hợp glaze và Duro Stain; kiểm độ trong & strength của màu đỏ gỗ', uu_tien=4,
        tai_lieu='ĐÃ CÓ: TDS KROMA RED IRON OXIDE RO (US) + SDS KROMA VN (4097, 4597) + SDS FERRISPEC RB 4097. Thiếu: COA theo lô',
        nhom_muc='Mục 2 – ưu tiên', nhom='ĐỎ'),
    'Red RO 4597': dict(ci_cas='P.R.101; CAS 1309-37-1', ton_kg=75, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Cùng nhóm đỏ oxit — kiểm độ trong & strength', uu_tien=4,
        tai_lieu='ĐÃ CÓ: SDS KROMA VN (4097, 4597). Thiếu: COA theo lô', nhom_muc='Mục 2 – ưu tiên', nhom='ĐỎ'),
    'Ferrispec FP RB-4097': dict(ci_cas='P.R.101; CAS 1309-37-1', ton_kg=375, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Cùng nhóm đỏ oxit Ferrispec', uu_tien=4, tai_lieu='ĐÃ CÓ: SDS FERRISPEC RB 4097 (VN)',
        nhom_muc='Mục 2 – ưu tiên', nhom='ĐỎ'),
    'Pigment Brown TB 1008': dict(ci_cas='chưa công bố đầy đủ', ton_kg=1047.5, ben_sang='chưa có', ben_thoi_tiet='chưa có',
        danh_gia='Tồn lớn — thử glaze/Duro Stain; BẮT BUỘC lấy TDS/SDS + pigment index + vehicle trước khi chốt', uu_tien=5,
        tai_lieu='ĐÃ CÓ: SDS Pigment Brown TB-1008 (Genky). Thiếu: TDS TB 1008', nhom_muc='Mục 2 – ưu tiên', nhom='NÂU'),
    'Brown SP 1008 W': dict(ci_cas='chưa công bố đầy đủ', ton_kg=323.9, ben_sang='chưa có', ben_thoi_tiet='chưa có',
        danh_gia='Tồn lớn — thử glaze/Duro Stain', uu_tien=5, tai_lieu='THIẾU toàn bộ tài liệu cho Brown SP 1008 W',
        nhom_muc='Mục 2 – ưu tiên', nhom='NÂU'),
    'Carbon Black MA 100': dict(ci_cas='P.Bk.7; CAS 1333-86-4', ton_kg=430, ben_sang='8', ben_thoi_tiet='5',
        danh_gia='Chỉnh tone, walnut/ebony; dùng THẤP để tránh làm đục glaze', uu_tien=6,
        tai_lieu='ĐÃ CÓ: MSDS Mitsubishi MA 100 + SDS NL.000329 (CLP VN). Thiếu: COA', nhom_muc='Mục 2 – ưu tiên', nhom='ĐEN'),
    'Carbon 30L': dict(ci_cas='P.Bk.7 (nghi HIBLACK 30L)', ton_kg=850, ben_sang='8', ben_thoi_tiet='5',
        danh_gia='Chỉnh tone; dùng thấp', uu_tien=6, tai_lieu='MSDS HIBLACK 30L (Tín Phú) — CẦN XÁC NHẬN mã; thiếu TDS',
        nhom_muc='Mục 2 – ưu tiên', nhom='ĐEN'),
    'Iron oxide Black VAP-330M': dict(ci_cas='P.Bk.11; CAS 1317-61-9', ton_kg=425, ben_sang='8', ben_thoi_tiet='5',
        danh_gia='Đen nâu & tone trầm; kiểm độ trong trên veneer', tai_lieu='ĐÃ CÓ: MSDS VAP-330M (02/10). Thiếu: TDS',
        nhom_muc='Mục 2 – ưu tiên', nhom='ĐEN'),
    'Hififast Yellow HF4G': dict(ci_cas='P.Y.151; C.I. 13980', ton_kg=190, ben_sang='NCC: rất tốt', ben_thoi_tiet='NCC: tốt',
        danh_gia='Phối vàng glaze/stain khi cần màu sạch; kiểm bleeding, solvent fastness, độ trong',
        tai_lieu='ĐÃ CÓ đủ: TDS + MSDS HIFIFAST HF4G (EN). Thiếu: COA', nhom_muc='Mục 2 – ưu tiên', nhom='VÀNG'),
    'Pigment Red TR 718': dict(ci_cas='P.R.101 transparent oxide', ton_kg=298.5, ben_sang='7–8', ben_thoi_tiet='5',
        danh_gia='Ưu tiên cho đỏ trong trên gỗ; xác nhận TDS Genky + tương thích hệ Duro',
        tai_lieu='ĐÃ CÓ: MSDS VN TR-718 (VAPAC). Thiếu: TDS + COA', nhom_muc='Mục 2 – ưu tiên', nhom='ĐỎ'),
}

NHOM_M8 = {'C5': 'MÀU PHA MÁY (Chromaflo)', 'C6': 'MÀU PHA MÁY (Chromaflo)', 'C4': 'MÀU PHA MÁY (Chromaflo)',
           'C2': 'MÀU PHA MÁY (Chromaflo)', 'C26': 'MÀU PHA MÁY (Chromaflo)', 'C27': 'MÀU PHA MÁY (Chromaflo)',
           'BLACK 20': 'MÀU NỘI BỘ MH', 'BLACK 56': 'MÀU NỘI BỘ MH', 'Y82': 'MÀU NỘI BỘ MH',
           'CN09': 'NCC KHÁC (Clariant)', 'BG 100': 'NCC KHÁC (Hostatint)', 'G007': 'NCC KHÁC (Tri Mộc)',
           'NS 29': 'NCC KHÁC (Matapel/Eckart)', 'NS 40': 'NCC KHÁC (Matapel/Eckart)'}

# ---- (a) A: gỡ tên KTV ở id 28 ----
ca = sqlite3.connect(A)
ca.execute("update danh_muc_mau set ghi_chu = replace(replace(replace(ghi_chu,'NV Nguyễn Văn Tươi','KTV (ẩn danh)'),'Nguyễn Văn Tươi','KTV (ẩn danh)'),'NV N.D. Vững','KTV (ẩn danh)')")
ca.commit()
print('A — 4 dòng còn lại:')
for r in ca.execute('select id, ma_mau, ghi_chu from danh_muc_mau order by id'):
    print('   id %-3s | %-14s | %s' % (r[0], r[1], r[2]))
n_name = ca.execute("select count(*) from danh_muc_mau where ghi_chu like '%Tươi%' or ghi_chu like '%Vững%'").fetchone()[0]
print('A — còn tên riêng:', n_name, '(0 = sạch) | integrity:', ca.execute('pragma integrity_check').fetchone()[0])
ca.close()

# ---- (b)+(c) B ----
cb = sqlite3.connect(B)
cb.row_factory = sqlite3.Row
rows = list(cb.execute('select id, ten, ma, nhom from mau'))
n_upd = 0
for r in rows:
    key = None
    for k in UU_TIEN:
        if k.lower() == (r['ten'] or '').lower() or k.lower() in (r['ten'] or '').lower() or (r['ten'] or '').lower() in k.lower():
            key = k
            break
    if key:
        d = dict(UU_TIEN[key])
        d.pop('nhom', None)
        cb.execute('update mau set %s where id=?' % ','.join('%s=?' % k for k in d), list(d.values()) + [r['id']])
        n_upd += 1
    if r['ma'] in NHOM_M8 and (r['nhom'] or '').startswith('(mục 8'):
        cb.execute('update mau set nhom=? where id=?', (NHOM_M8[r['ma']], r['id']))
cb.execute("update mau set nhom = 'ĐEN' where ma = '30L'")
cb.commit()
print('\nB — đã áp thông tin ưu tiên cho %d dòng' % n_upd)
print('B — tổng mã: %d | C.I./CAS: %d | tồn kho: %d | ưu tiên: %d | tài liệu: %d' % (
    cb.execute('select count(*) from mau').fetchone()[0],
    cb.execute('select count(*) from mau where ci_cas is not null').fetchone()[0],
    cb.execute('select count(*) from mau where ton_kg is not null').fetchone()[0],
    cb.execute('select count(*) from mau where uu_tien is not null').fetchone()[0],
    cb.execute('select count(*) from mau where tai_lieu is not null').fetchone()[0]))
print('\n=== B — DANH MỤC (ưu tiên trước) ===')
for r in cb.execute("""select nhom, ma, ten, coalesce(ci_cas,'—') ci, ton_kg, uu_tien, coalesce(nhom_muc,'') nm
                       from mau order by (uu_tien is null), uu_tien, nhom, ma"""):
    print('  %-26s %-12s %-38s %-26s tồn %-8s ưu tiên %-4s %s' % (
        (r['nhom'] or '')[:26], r['ma'], (r['ten'] or '')[:38], (r['ci'] or '')[:26],
        ('' if r['ton_kg'] is None else r['ton_kg']), ('' if r['uu_tien'] is None else r['uu_tien']), r['nm']))
print('B — integrity:', cb.execute('pragma integrity_check').fetchone()[0])
cb.close()
