# -*- coding: utf-8 -*-
"""Nạp LUẬT #29 vào CSDLA.huan_luyen (chủ nhân chốt 07/10/2026) + xuất lại gói kiến thức cho AGY."""
import os, shutil, sqlite3
from datetime import datetime

DIR = r'C:\Claw 2\Nghien cuu\Du-an-A-Quy-trinh-son'
DB = os.path.join(DIR, 'CSDLA.db')
BK = os.path.join(DIR, '_backup_CSDLA_truoc_luat29_%s.db' % datetime.now().strftime('%Y%m%d_%H%M%S'))
shutil.copy2(DB, BK)
print('backup:', BK, os.path.getsize(BK), 'byte')

NGUYEN_VAN = ('“lần sau chỉ để AGY dùng mô hình mạnh phân tích gỗ mộc và màu sắc mẫu , rồi dùng kiến thức trong các CSDL A và B '
              'để lên qui trình và pha màu, lưu vào skill. Trong trường hợp không có hình gỗ mộc thì có thể hỏi lại hoặc tự đưa ra '
              'giả định là màu gỗ tự nhiên của loại gỗ dùng sơn mẫu để lên qui trình và công thức pha màu .” + “Ko dùng code , chỉ dùng AGY thôi”')
QUY_TAC = ('Mỗi lượt đề xuất quy trình + công thức pha màu: (1) AGY dùng MÔ HÌNH MẠNH (gemini-3.1-pro-high, --effort high) tự phân tích '
           'ảnh GỖ MỘC + MẪU MÀU (kết luận DYE/PIGMENT kèm % chắc chắn); (2) áp kiến thức CSDL A (luật, 34 bước, QT 112/116/118) + CSDL B '
           '(45 ô màu DYE + 26 mã) ra QUY TRÌNH (bảng ≤9 dòng, chỉ công đoạn phủ, phân loại LOẠI MÀU, có dòng KIỂM TRA MÀU–DẶM MÀU sau mỗi '
           'lần chà nhám) + CÔNG THỨC PHA MÀU (DYE-first, chỉ mã có trong CSDL B, có cách pha + bảng chỉnh + 3 ô thử). '
           'KHÔNG viết code để đo/phối màu/kiểm chứng. Thiếu ảnh gỗ mộc ⇒ hỏi lại HOẶC giả định màu gỗ tự nhiên của loài gỗ trong mẫu.')

con = sqlite3.connect(DB, timeout=90, isolation_level=None)
con.execute('PRAGMA busy_timeout=90000')
cur = con.cursor()
truoc = cur.execute('SELECT COUNT(*) FROM huan_luyen').fetchone()[0]
cur.execute('BEGIN IMMEDIATE')
trung = cur.execute("SELECT COUNT(*) FROM huan_luyen WHERE quy_tac LIKE '%MÔ HÌNH MẠNH%'").fetchone()[0]
if trung:
    print('   ⏭ luật này đã có, không thêm nữa')
else:
    cur.execute("""INSERT INTO huan_luyen (ngay, nhom, nguyen_van, quy_tac, pham_vi, trang_thai, nguon, ghi_chu)
                   VALUES (?,?,?,?,?,?,?,?)""",
                ('2026-10-07', 'Quy trình làm việc', NGUYEN_VAN, QUY_TAC,
                 'Mọi lô đề xuất quy trình sơn + công thức pha màu (gỗ mộc + mẫu)',
                 'Đang áp dụng', 'Chủ nhân (Ngô Đức Minh) chốt 07/10/2026',
                 'Thay thế cách làm tự viết code đo màu/phối màu. Đầu vào chi tiết cho AGY: YEU_CAU_L010_B1_phan_tich_mau.txt + '
                 'YEU_CAU_L010_B2_quytrinh_congthuc.txt; gói kiến thức: CSDLB_GOI_MAU_DYE.md + CSDLA_BOSUNG_QT_MOC.md; runner: _run_agy_lo10.py'))
con.execute('COMMIT')
sau = cur.execute('SELECT COUNT(*) FROM huan_luyen').fetchone()[0]
print('huan_luyen: %d → %d' % (truoc, sau))
print('\n=== đọc lại dòng vừa thêm ===')
r = cur.execute('SELECT id, ngay, nhom, substr(nguyen_van,1,90), substr(quy_tac,1,110), trang_thai FROM huan_luyen ORDER BY id DESC LIMIT 1').fetchone()
print('   id %s | %s | %s' % (r[0], r[1], r[2]))
print('   nguyên văn:', r[3], '...')
print('   quy tắc   :', r[4], '...')
print('   trạng thái:', r[5])
print('\nintegrity:', cur.execute('PRAGMA integrity_check').fetchone()[0])
print('các bảng khác (phải không đổi): quy_trinh %d | buoc_chuan %d | buoc_quy_trinh %d' % tuple(
    cur.execute('SELECT (SELECT COUNT(*) FROM quy_trinh),(SELECT COUNT(*) FROM buoc_chuan),(SELECT COUNT(*) FROM buoc_quy_trinh)').fetchone()))
con.close()

# xuất lại gói kiến thức cho AGY
for f in os.listdir(DIR):
    if f.startswith('snapshot_kien_thuc') and f.endswith('.py'):
        print('\nchạy lại gói kiến thức:', f)
        import subprocess
        p = subprocess.run([r'C:\Users\admin\AppData\Local\hermes\hermes-agent\venv\Scripts\python.exe', f],
                           cwd=DIR, capture_output=True, text=True, encoding='utf-8', errors='replace')
        print(p.stdout[-700:] or '', p.stderr[-400:] or '')
        break
kt = os.path.join(DIR, 'CSDLA_KIEN_THUC_HUAN_LUYEN.md')
print('gói kiến thức:', os.path.getsize(kt), 'byte' if os.path.exists(kt) else 'CHƯA CÓ',
      '| số luật nhắc MÔ HÌNH MẠNH:', open(kt, encoding='utf-8').read().count('MÔ HÌNH MẠNH') if os.path.exists(kt) else 0)
