# -*- coding: utf-8 -*-
"""Mở rộng CSDL B cho app HUẤN LUYỆN / HIỆU CHỈNH:
  - bảng `hon_hop`        : mỗi lần anh đưa hỗn hợp màu + dự đoán AGY + ảnh thực tế + đối chiếu
  - bảng `hieu_chinh_mau` : mỗi lần hiệu chỉnh thông số một màu (có lịch sử, không ghi đè)
  - thêm cột vào `mau`    : he_so_cuong_do, lab_hieu_chinh, so_lan_hieu_chinh, ngay_hieu_chinh
Chạy không tham số = kiểm tra; --xoa không dùng (chỉ thêm, không xoá).
"""
import os, sqlite3, sys, time

DB = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\CSDLB.db'
THEM_COT = (('he_so_cuong_do', 'REAL DEFAULT 1.0'), ('lab_hieu_chinh', 'TEXT'),
            ('so_lan_hieu_chinh', 'INTEGER DEFAULT 0'), ('ngay_hieu_chinh', 'TEXT'),
            ('uu_tien_hl', 'INTEGER'))

SQL = '''
CREATE TABLE IF NOT EXISTS hon_hop (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  tao_luc TEXT, nguoi_nhap TEXT, ghi_chu TEXT,
  thanh_phan TEXT,              -- JSON: [{"mau": "...", "ma": "...", "ti_le": 60.0}, ...]
  tong_ti_le REAL,
  trang_thai TEXT DEFAULT 'cho_du_doan',   -- cho_du_doan | da_du_doan | da_doi_chieu
  du_doan_hex TEXT, du_doan_L REAL, du_doan_a REAL, du_doan_b REAL, du_doan_ghi_chu TEXT,
  du_doan_luc TEXT, du_doan_file TEXT, du_doan_giay REAL,
  anh_thuc_te TEXT,             -- tên tệp ảnh thực tế anh tải lên
  thuc_te_hex TEXT, thuc_te_L REAL, thuc_te_a REAL, thuc_te_b REAL,
  delta_E REAL, ket_luan TEXT, doi_chieu_luc TEXT, doi_chieu_file TEXT, doi_chieu_giay REAL,
  thu_muc TEXT, loi TEXT
);
CREATE TABLE IF NOT EXISTS hieu_chinh_mau (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  ngay TEXT, mau_id INTEGER, mau_ten TEXT, hon_hop_id INTEGER,
  tham_so TEXT, gia_tri_cu TEXT, gia_tri_moi TEXT,
  ly_do TEXT, delta_E_truoc REAL, nguon TEXT, da_ap_dung INTEGER DEFAULT 1
);
CREATE INDEX IF NOT EXISTS idx_hh_trang_thai ON hon_hop(trang_thai);
CREATE INDEX IF NOT EXISTS idx_hc_mau ON hieu_chinh_mau(mau_id);
'''

con = sqlite3.connect(DB)
c = con.cursor()
co = [r[1] for r in c.execute('PRAGMA table_info(mau)')]
them = [cot for cot, _ in THEM_COT if cot not in co]
print('DB:', DB, os.path.getsize(DB), 'byte')
print('cột sẽ thêm vào `mau`:', them if them else '(đã có đủ)')
c.executescript(SQL)
for cot, kieu in THEM_COT:
    if cot not in co:
        c.execute('ALTER TABLE mau ADD COLUMN %s %s' % (cot, kieu))
        print('   + mau.%s' % cot)
# màu cũ: hệ số mặc định 1.0, ưu tiên hiển thị theo thứ tự nhập
c.execute('UPDATE mau SET he_so_cuong_do=1.0 WHERE he_so_cuong_do IS NULL')
c.execute('UPDATE mau SET so_lan_hieu_chinh=0 WHERE so_lan_hieu_chinh IS NULL')
c.execute("INSERT INTO nhat_ky (ngay,viec,chi_tiet,nguon) VALUES (?,?,?,?)",
          (time.strftime('%Y-%m-%d %H:%M'), 'Mở rộng CSDL B cho app huấn luyện/hiệu chỉnh màu',
           'Thêm bảng hon_hop (hỗn hợp + dự đoán AGY + ảnh thực tế + ΔE) và hieu_chinh_mau (lịch sử hiệu chỉnh); thêm cột he_so_cuong_do/lab_hieu_chinh/so_lan_hieu_chinh/ngay_hieu_chinh vào mau. Chỉ THÊM, không sửa dữ liệu cũ.',
           'chủ nhân yêu cầu 08/10/2026'))
con.commit()
con.execute('VACUUM')

print('\n=== KIỂM CHỨNG ===')
for (t,) in c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name").fetchall():
    print('   %-16s %5d dòng' % (t, c.execute('SELECT COUNT(*) FROM [%s]' % t).fetchone()[0]))
print('   cột mau:', ', '.join(r[1] for r in c.execute('PRAGMA table_info(mau)')))
print('   integrity:', c.execute('PRAGMA integrity_check').fetchone()[0])
print('   8 mã màu còn nguyên:', c.execute('SELECT COUNT(*) FROM mau').fetchone()[0], '| tấm mẫu:', c.execute('SELECT COUNT(*) FROM mau_bang_in').fetchone()[0])
print('   cỡ tệp:', os.path.getsize(DB), 'byte')
con.close()
