# -*- coding: utf-8 -*-
"""Hoàn nguyên MỌI hiệu chỉnh sinh ra từ ẢNH TEST (ảnh mẫu tách từ bảng màu, không phải hỗn hợp thật),
và trả các hỗn hợp đó về trạng thái 'da_du_doan' để chủ nhân tải ảnh thật.

Nhận diện ảnh test: đường dẫn ảnh nằm trong thư mục 'anh_o' (ảnh mẫu) hoặc bản ghi có ghi chú 'KIỂM THỬ'.

Chạy không tham số = xem trước; --xoa = thực hiện.
"""
import os, re, sqlite3, sys, time

DB = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\CSDLB.db'
XOA = '--xoa' in sys.argv
con = sqlite3.connect(DB)
c = con.cursor()
c.row_factory = sqlite3.Row

hh = [dict(r) for r in c.execute("SELECT * FROM hon_hop WHERE trang_thai IN ('da_doi_chieu','cho_xac_nhan','da_hieu_chinh') AND "
                                 "(anh_thuc_te GLOB '*[tT][0-9]_o[0-9][0-9].png' OR ghi_chu LIKE '%KIỂM THỬ%')").fetchall()]
print('=== HỖN HỢP DÙNG ẢNH TEST (cần hoàn nguyên) ===')
for v in hh:
    print('   #%s | %s | ΔE %s | ảnh: %s' % (v['id'], v['nguoi_nhap'], v['delta_E'], os.path.basename(v['anh_thuc_te'] or '')))
    for r in c.execute('SELECT id,mau_ten,gia_tri_cu,gia_tri_moi FROM hieu_chinh_mau WHERE hon_hop_id=?', (v['id'],)).fetchall():
        print('        hc#%s %s: %s → %s' % tuple(r))
if not hh:
    print('   (không có)')

if not XOA:
    print('\n(dự kiến: trả hệ số các màu bị sửa về 1.0 · so_lan_hieu_chinh=0 · xoá ghi chú HC đã nối · '
          'hieu_chinh_mau.da_ap_dung=0 · xoá ảnh test + trả hỗn hợp về da_du_doan để tải ảnh thật)')
    print('(chạy lại với --xoa để thực hiện)')
    sys.exit(0)

for v in hh:
    hid = v['id']
    for r in c.execute('SELECT id,mau_id,gia_tri_cu,gia_tri_moi FROM hieu_chinh_mau WHERE hon_hop_id=? AND da_ap_dung=1', (hid,)).fetchall():
        mid, cu, moi = r[1], r[2], r[3]
        con.execute("UPDATE mau SET he_so_cuong_do=1.0, so_lan_hieu_chinh=0, ngay_hieu_chinh=NULL WHERE id=?", (mid,))
        # bỏ đúng đoạn ghi chú đã nối thêm
        con.execute("""UPDATE mau SET ghi_chu=REPLACE(COALESCE(ghi_chu,''),
                       ' | HC ' || substr(?,9,2) || '/' || substr(?,6,2) || ': hệ số ' || ? || '→' || ? || ' (ΔE ' || ? || ')', '')
                       WHERE id=?""",
                    (v['doi_chieu_luc'] or '', v['doi_chieu_luc'] or '', cu, moi, v['delta_E'], mid))
        print('   hoàn nguyên màu id %s (%s → 1.0)' % (mid, moi))
    c.execute("UPDATE hieu_chinh_mau SET da_ap_dung=0, ly_do=COALESCE(ly_do,'')||' [KHÔNG ÁP DỤNG — ảnh đối chiếu là ẢNH TEST, không phải ảnh hỗn hợp thật]' WHERE hon_hop_id=?", (hid,))
    # xoá ảnh test + trả về trạng thái chờ tải ảnh thật (GIỮ dự đoán)
    p = v['anh_thuc_te']
    try:
        if p and os.path.exists(p):
            os.remove(p)
            print('   đã xoá ảnh test:', os.path.basename(p))
    except OSError as e:
        print('   ⚠️ không xoá được ảnh test:', e)
    c.execute("""UPDATE hon_hop SET trang_thai='da_du_doan', anh_thuc_te=NULL, thuc_te_hex=NULL, thuc_te_L=NULL,
                 thuc_te_a=NULL, thuc_te_b=NULL, delta_E=NULL, ket_luan=NULL, doi_chieu_luc=NULL, doi_chieu_file=NULL,
                 doi_chieu_giay=NULL, loi=NULL, ghi_chu=COALESCE(ghi_chu,'')||' [ĐÃ HOÀN NGUYÊN: ảnh test bị xoá — chờ tải ảnh hỗn hợp THẬT]'
                 WHERE id=?""", (hid,))
c.execute("INSERT INTO nhat_ky (ngay,viec,chi_tiet,nguon) VALUES (?,?,?,?)",
          (time.strftime('%Y-%m-%d %H:%M'), 'Hoàn nguyên hiệu chỉnh sinh từ ảnh test',
           'Các hỗn hợp dùng ảnh test (ảnh mẫu bảng màu) đã được trả hệ số về 1.0, đánh dấu lịch sử da_ap_dung=0, xoá ảnh test và trả về trạng thái da_du_doan để chủ nhân tải ảnh hỗn hợp thật.',
           'kiểm chứng nội bộ của trợ lý'))
con.commit()
con.execute('VACUUM')

print('\n=== SAU HOÀN NGUYÊN ===')
for r in c.execute('SELECT id,nguoi_nhap,trang_thai,du_doan_hex,anh_thuc_te,delta_E FROM hon_hop ORDER BY id'):
    print('   HH#%s | %s | %s | dd %s | ảnh %s | ΔE %s' % (r[0], r[1], r[2], r[3], os.path.basename(r[4]) if r[4] else '(trống — chờ ảnh thật)', r[5]))
print('   hệ số cường độ:', c.execute('SELECT ma,he_so_cuong_do FROM mau ORDER BY ma').fetchall())
print('   hieu_chinh_mau (tổng, đang áp dụng):', c.execute('SELECT COUNT(*),COALESCE(SUM(da_ap_dung),0) FROM hieu_chinh_mau').fetchone())
print('   integrity:', c.execute('PRAGMA integrity_check').fetchone()[0])
con.close()
