# -*- coding: utf-8 -*-
"""(1) TRẢ LẠI CSDLA (CSDL A) về đúng trạng thái trước khi thêm danh mục màu oxid (xoá đúng 11 dòng + 1 luật đã thêm).
   (2) TẠO CSDL B MỚI: dự án nghiên cứu hệ màu STAIN / GLAZE cho sơn gỗ — nạp danh mục 11 màu + chất phân tán + liên kết CSDL giá.
"""
import io, os, sqlite3, time

NGAY = '2026-10-06'
A = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son\CSDLA.db'
BDIR = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze'
B = os.path.join(BDIR, 'CSDLB.db')
GIA = r'C:\c\deepseek-harness\claw2-db\btchem.db'
os.makedirs(BDIR, exist_ok=True)

# ================= (1) REVERT A =================
c = sqlite3.connect(A)
truoc = {t: c.execute('select count(*) from %s' % t).fetchone()[0] for t in ['danh_muc_mau', 'huan_luyen', 'quy_trinh', 'buoc_quy_trinh']}
print('A — trước khi revert:', truoc)
n1 = c.execute("delete from danh_muc_mau where ma_mau in ('Iron Oxide RB 4097','Red RO 4597','Ferrispec FP RB-4097','Pigment Red TR 718','Ferrispec FP YB-2087','Hififast Yellow HF4G','Umber Pigment 645','Hoover 778 BN','Pigment Brown TB 1008','Brown SP 1008 W','Iron oxide Black VAP-330M')").rowcount
n2 = c.execute("delete from huan_luyen where nhom = 'Màu & phụ gia phân tán' and nguyen_van like '%VAP-330M%'").rowcount
c.commit()
sau = {t: c.execute('select count(*) from %s' % t).fetchone()[0] for t in ['danh_muc_mau', 'huan_luyen', 'quy_trinh', 'buoc_quy_trinh']}
print('A — đã xoá %d mã màu + %d luật ⇒ sau revert: %s' % (n1, n2, sau))
print('A — integrity:', c.execute('pragma integrity_check').fetchone()[0])
assert sau['danh_muc_mau'] == 29 and sau['huan_luyen'] == 28, 'CHƯA về đúng 29/28!'
c.close()

# ================= (2) TẠO + NẠP CSDL B =================
if os.path.exists(B):
    print('CSDLB đã tồn tại — dùng lại:', B)
cb = sqlite3.connect(B)
cb.execute('pragma journal_mode=WAL')
cb.executescript("""
create table if not exists mau (
  id integer primary key, nhom text, ten text unique, ma text, phan_loai text,
  hang_ncc text, phan_tan text, tang_thay text, ghi_chu text, nguon text, ngay_cap_nhat text);
create table if not exists phan_tan (
  id integer primary key, ten text unique, loai text, hang text, ghi_chu text);
create table if not exists lien_ket_gia (
  id integer primary key, mau_ten text, db text, bang text, id_trong_bang integer, ten_trong_bang text, ghi_chu text);
create table if not exists nhat_ky (
  id integer primary key, ngay text, viec text, chi_tiet text, nguon text);
""")
print('\nB — đã tạo/lấy schema:', [r[0] for r in cb.execute("select name from sqlite_master where type='table' order by name")])

MAU = [
    # nhom, ten, ma, phan_loai, hang_ncc, phan_tan, tang_thay, ghi_chu, id_gia
    ('ĐỎ', 'Iron Oxide RB 4097', 'RB 4097', 'Oxit sắt (vô cơ)', 'ROCKWOOD - TQ - BRENNTAG', None, 'Đỏ oxit', None, 231),
    ('ĐỎ', 'Red RO 4597', 'RO 4597', 'Oxit sắt (vô cơ)', 'ROCKWOOD - TQ - BRENNTAG', None, 'Đỏ oxit', 'CSDL giá ghi “không mua nữa” — cần xác nhận còn dùng không', 232),
    ('ĐỎ', 'Ferrispec FP RB-4097', 'RB-4097', 'Oxit sắt (vô cơ)', 'chưa có trong CSDL giá (Ferrispec FP = dòng oxit sắt)', None, 'Đỏ oxit',
     'CHƯA có mã này trong btchem.db — cần xác nhận: sản phẩm mới hay cùng mã với Iron Oxide RB 4097?', None),
    ('ĐỎ', 'Pigment Red TR 718', 'TR 718', 'HỮU CƠ (organic)', 'GENKY - VIỆT ẤN', None, 'Đỏ hữu cơ', None, 224),
    ('VÀNG', 'Ferrispec FP YB-2087', 'YB-2087', 'Oxit sắt (vô cơ)', 'MING HUI - TQ', None, 'Vàng oxit', None, 221),
    ('VÀNG', 'Hififast Yellow HF4G', 'HF4G', 'HỮU CƠ (organic)', 'CAPPELLE - BRENNTAG', None, 'Vàng hữu cơ', None, 214),
    ('NÂU', 'Umber Pigment 645', '645', 'Đất / umber (vô cơ tự nhiên)', 'VENATOR - ROCKWOOD - BRENNTAG', None, 'Nâu đất', None, 242),
    ('NÂU', 'Hoover 778 BN', '778 BN', 'Van Dyke brown', 'HOOVER - USA - HÓA SAO Á CHÂU', None, 'Nâu Van Dyke', None, 241),
    ('NÂU', 'Pigment Brown TB 1008', 'TB 1008', 'Paste màu gỗ', 'GENKY - MINH ANH / VIỆT ẤN', None, 'Nâu paste gỗ', None, 240),
    ('NÂU', 'Brown SP 1008 W', 'SP 1008 W', 'Paste màu gỗ', 'GENKY - MINH ANH', None, 'Nâu paste gỗ', None, 370),
    ('ĐEN', 'Iron oxide Black VAP-330M', 'VAP-330M', 'Oxit sắt (vô cơ)', 'MATAPEL - ECKART', 'Disperbyk 106 (BYK 106)',
     'Đen oxit', 'Nguồn gốc ghi: “Đen oxit: Iron oxide Black VAP-330M dùng phân tán BYK 106, còn màu đen Oxid sẳt thì dùng phân tán LPN 22836” — ⚠️ 2 chất phân tán cho cùng đen oxit, CHỜ CHỦ DỰ ÁN CHỐT', 233),
]
n = 0
for nhom, ten, ma, pl, ncc, pt, tang, gc, id_gia in MAU:
    cb.execute("""insert or replace into mau (nhom, ten, ma, phan_loai, hang_ncc, phan_tan, tang_thay, ghi_chu, nguon, ngay_cap_nhat)
                  values (?,?,?,?,?,?,?,?,?,?)""",
               (nhom, ten, ma, pl, ncc, pt, tang, gc,
                'Chủ dự án cung cấp 06/10/2026 — danh mục màu Oxid sắt + hữu cơ', NGAY))
    n += 1
    if id_gia:
        ten_gia = cb.execute('select 1').fetchone()
        cb.execute("""insert into lien_ket_gia (mau_ten, db, bang, id_trong_bang, ten_trong_bang, ghi_chu)
                      values (?,?,?,?,?,?)""", (ten, 'btchem.db', 'nguyen_lieu', id_gia, ten, 'mã trong CSDL giá nguyên liệu'))

for ten, loai, hang, gc in [
    ('Disperbyk 106 (BYK 106)', 'Chất phân tán ướt', 'BYK', 'Đang dùng cho Iron oxide Black VAP-330M (theo chủ dự án) — CSDL giá id 117, nhóm “BYK LPN 22836”'),
    ('BYK LPN 22836', 'CHƯA RÕ: đang là TÊN NHÓM trong bảng giá (chứa Disperbyk 103/106/110/2150, Silclean 3700, Ceraflour 915/916, Defom 5800F), KHÔNG phải một mã sản phẩm', 'BYK', 'Chủ dự án ghi “màu đen Oxid sẳt dùng phân tán LPN 22836” ⇒ cần chốt mã sản phẩm thật'),
]:
    cb.execute('insert or replace into phan_tan (ten, loai, hang, ghi_chu) values (?,?,?,?)', (ten, loai, hang, gc))

cb.execute('insert into nhat_ky (ngay, viec, chi_tiet, nguon) values (?,?,?,?)',
           (NGAY, 'Khởi tạo CSDL B', 'CSDL B cho dự án nghiên cứu hệ màu STAIN/GLAZE sơn gỗ. Nạp danh mục 11 màu oxid sắt + hữu cơ (chủ dự án cung cấp 06/10/2026) + chất phân tán cho đen oxit (còn điểm chờ chốt).',
            'Yêu cầu chủ dự án 06/10/2026: “cập nhật vào cơ sở dữ liệu B (mới) về dự án nghiên cứu các hệ màu stain, glaze cho sơn gỗ”'))
cb.commit()
print('B — đã nạp %d màu · phan_tan %d · lien_ket_gia %d' % (
    cb.execute('select count(*) from mau').fetchone()[0],
    cb.execute('select count(*) from phan_tan').fetchone()[0],
    cb.execute('select count(*) from lien_ket_gia').fetchone()[0]))
print('B — integrity:', cb.execute('pragma integrity_check').fetchone()[0])

# file nguồn nguyên văn + chỉ mục
SRC = os.path.join(BDIR, 'NGUON_danh-muc-mau_06-10-2026.md')
io.open(SRC, 'w', encoding='utf-8', newline='').write(
    '# NGUỒN NGUYÊN VĂN — danh mục màu Oxid sắt / hữu cơ (chủ dự án, 06/10/2026)\n\n'
    '> “lưu lại các màu Oxid sắt : . Nhóm màu Đỏ\n'
    '> Đỏ oxit: Iron Oxide RB 4097, Red RO 4597, Ferrispec FP RB-4097\n>\n'
    '> Đỏ hữu cơ: Pigment Red TR 718\n>\n'
    '> 2. Nhóm màu Vàng\n'
    '> Vàng oxit: Ferrispec FP YB-2087\n>\n'
    '> Vàng hữu cơ: Hififast Yellow HF4G\n>\n'
    '> 3. Nhóm màu Nâu\n'
    '> Nâu đất/umber: Umber Pigment 645\n'
    '> Nâu Van Dyke: Hoover 778 BN\n'
    '> Nâu paste gỗ: Pigment Brown TB 1008, Brown SP 1008 W\n>\n'
    '> 4. Nhóm màu Đen\n'
    '> Đen oxit: Iron oxide Black VAP-330M       dùng phân tán BYK 106, còn màu đen Oxid sẳt thì dùng phân tán LPN 22836”\n')
IDX = os.path.join(BDIR, 'CSDL_du-an-B.md')
io.open(IDX, 'w', encoding='utf-8', newline='').write(
    '# CSDL B — DỰ ÁN NGHIÊN CỨU HỆ MÀU STAIN / GLAZE CHO SƠN GỖ\n\n'
    '**File CSDL:** `CSDLB.db` (thư mục `C:\\Claw 2\\Nghien cuu\\Du-an-B-He-mau-Stain-Glaze\\`)\n'
    '**Khởi tạo:** 06/10/2026 — theo yêu cầu chủ dự án.\n\n'
    '## Bảng dữ liệu\n'
    '| Bảng | Nội dung |\n|---|---|\n'
    '| `mau` | Danh mục màu: nhóm · tên · mã · phân loại (oxit sắt / hữu cơ / đất-umber / Van Dyke / paste gỗ) · hãng-NCC · chất phân tán · ghi chú |\n'
    '| `phan_tan` | Chất phân tán (Disperbyk 106 …) + điểm chờ chốt về “BYK LPN 22836” |\n'
    '| `lien_ket_gia` | Liên kết sang CSDL giá `btchem.db.nguyen_lieu` (id mã tương ứng) |\n'
    '| `nhat_ky` | Nhật ký thay đổi CSDL B |\n\n'
    '## Điểm đang CHỜ chủ dự án chốt\n'
    '1. Chất phân tán cho **đen oxit**: 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.\n'
    '2. **Ferrispec FP RB-4097** chưa có mã trong CSDL giá (chỉ có Ferrispec FP YB-2087 vàng).\n'
    '3. **Red RO 4597** trong CSDL giá ghi “không mua nữa”.\n\n'
    '## Nguồn\n'
    '- `NGUON_danh-muc-mau_06-10-2026.md` (nguyên văn chủ dự án)\n'
    '- CSDL giá: `C:\\c\\deepseek-harness\\claw2-db\\btchem.db` (bảng `nguyen_lieu`)\n')
print('\nđã tạo:', os.path.basename(SRC), os.path.getsize(SRC), 'byte |', os.path.basename(IDX), os.path.getsize(IDX), 'byte')
cb.close()
