# -*- coding: utf-8 -*-
"""Giao AGY: ĐỀ XUẤT CÔNG THỨC MÀU NỀN (hệ Dye + Pigment) từ CSDL B cho mẫu walnut đậm."""
import io, os, subprocess, time

DIR = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\phan-tich-nen-mau-07-10'
AGY = r'C:\Users\admin\AppData\Local\agy\bin\agy.exe'

BOI_CANH = u"""BỐI CẢNH — dự án B "Nghiên cứu hệ màu STAIN / GLAZE cho sơn gỗ" của BTChem.

Trong thư mục làm việc có:
1. `1_MAU_da_len_mau.jpg` — ẢNH MẪU ĐÃ LÊN MÀU (gỗ nâu đậm, vân thẳng dọc; góc phải trên có miếng BĂNG KEO vàng nhạt
   ghi số "4" — KHÔNG phải phần màu cần đạt, bỏ qua khi đánh giá màu).
2. `2_GO_MOC.jpg` — ẢNH GỖ MỘC (gỗ chưa sơn, sáng, vân xoáy tự nhiên; mép phải có thanh gỗ nâu đậm DÁN THÊM
   và nền là carton — CẢ HAI KHÔNG phải nền gỗ cần nhuộm, bỏ qua).
3. `SO_LIEU_DO_DUOC.txt` — số liệu ĐO BẰNG CODE (trung vị pixel → CIELAB D65) của 2 ảnh, kèm cảnh báo sai lệch.
4. `CSDLB_danh_muc_26ma.txt` — 26 mã màu đang có trong CSDL B (bảng `mau`): nhóm, tên, mã, phân loại, hãng, tồn kho kg, độ ưu tiên, C.I./CAS.
5. `CSDLB_bang_mau_in_121o.txt` — 121 ô của BẢNG MÀU IN (bảng `mau_bang_in`): tên in NGUYÊN VĂN kèm nồng độ %,
   số hex + L*a*b* do CODE đo từ ảnh chụp bảng in, kèm cột độ tin cậy (cao / trung-binh / thap) và ghi chú.

QUY TẮC BẮT BUỘC:
- CHỈ được dùng mã màu CÓ THẬT trong 2 file danh mục trên. Cấm bịa mã, cấm dùng mã ngoài danh mục.
- Tên màu phải ghi NGUYÊN VĂN như trong bảng (giữ cả % nếu tên in có %). Nếu bảng in viết hai kiểu cho cùng một
  mã (ví dụ "Đỏ VM334 (5%)" và "Đỏ VM 334 (10%)") thì ghi y như vậy.
- Số liệu màu: ưu tiên dùng số trong `SO_LIEU_DO_DUOC.txt` và cột hex/L*a*b* của bảng in; nói rõ số nào lấy từ đâu.
- Chỗ nào không đọc chắc hoặc bảng in nghi ngờ sai thì ghi "KHÔNG CHẮC" — không tự đoán.
- KHÔNG tự sửa số liệu, không làm tròn khác đi.
"""

YEU_CAU = u"""Đọc 2 ảnh và 3 file số liệu/danh mục trong thư mục, rồi ĐỀ XUẤT CÔNG THỨC MÀU NỀN.

GHI KẾT QUẢ DẦN RA FILE `_agy_cong_thuc_nen_mau.md` (ghi ngay từng phần khi làm xong, không đợi hết).

Cấu trúc bắt buộc:

## A. Đọc ảnh mẫu và gỗ mộc
- Ảnh 1: tông màu tổng thể (nâu đậm/trung/ấm hay lạnh), độ bóng (mờ/bán bóng), chiều vân, có ghim sớ/lỗ gỗ không,
  mức "nhìn xuyên thấy vân" (nhuộm trong hay che kín). Mô tả phần băng keo bị bỏ qua.
- Ảnh 2: màu gỗ mộc, mức hút ẩm/bề mặt nhìn thấy, phần thanh gỗ đậm + carton bị bỏ qua.
- Đối chiếu với số đo trong `SO_LIEU_DO_DUOC.txt`: mẫu L* 47,1 / a* +15,8 / b* +5,6 so với gỗ mộc L* 69,0 / a* −0,4 / b* +2,1.

## B. Xác định mục tiêu màu
- Màu nền cần đạt (L*a*b* + hex mục tiêu) và dải vân cần giữ (P10 30,8 → P90 68,6).
- Cần HẠ SÁNG bao nhiêu, ĐẨY ĐỎ/VÀNG bao nhiêu — nêu rõ đây là số ĐO, độ tin cậy ra sao (ảnh không có thẻ màu chuẩn).

## C. CHỌN MÀU TỪ DANH MỤC (phần quan trọng nhất)
- Lập bảng ứng viên lấy từ `CSDLB_bang_mau_in_121o.txt` và `CSDLB_danh_muc_26ma.txt`: mã | nhóm DYE/PIGMENT |
  nồng độ ô đã đo | hex | L*a*b* | lệch so với mục tiêu (nêu ΔL*, Δa*, Δb*) | tồn kho kg | độ ưu tiên.
- Giải thích vì sao chọn từng mã: nó bù phần nào của mục tiêu (hạ sáng? đẩy đỏ? đẩy vàng? giữ vân?).
- Nêu rõ những mã trong danh mục mà em thấy KHÔNG phù hợp cho việc nhuộm nền này và lý do.

## D. HAI PHƯƠNG ÁN CÔNG THỨC (PA1 khuyến nghị · PA2 thay thế)
Mỗi phương án trình bày bằng BẢNG:
`mã màu (nguyên văn, kèm % nếu có) | nhóm | tỉ lệ đề xuất (phần khối lượng trong hỗn hợp màu) | vai trò | lý do`
Sau bảng, ghi:
1. **Nồng độ dùng trong dung dịch** (ví dụ % màu trong dung dịch nhuộm/chất ngấm) và tổng khối lượng ví dụ cho 1 kg dung dịch.
2. **Thứ tự pha** và dung môi/chất kết nối nên dùng (chỉ nêu loại chung nếu danh mục không có dữ liệu dung môi).
3. **Cách lên màu**: nhuộm/chất ngấm trước hay lót trước, số lớp, thời gian, cách lau/để khô.
4. **Màu dự kiến đạt** (L*a*b* + hex) so với mục tiêu — nói rõ đây là TÍNH TOÁN ƯỚC LƯỢNG, phải thử mới chắc.
5. **Nếu lệch thì chỉnh mã nào, tăng/giảm bao nhiêu**. Nêu riêng: lệch quá tối · quá đỏ · quá vàng · mất vân.
6. **Rủi ro / điều cần kiểm trước khi sản xuất**.

## E. Điểm cần xác nhận
Liệt kê những chỗ em KHÔNG CHẮC (thiếu số đo, bảng in nghi sai, chưa biết loại dung môi, chưa rõ tồn kho…).

Sau khi ghi xong mục A–E, in dòng cuối cùng: HOAN TAT
"""

io.open(os.path.join(DIR, 'BOI_CANH.txt'), 'w', encoding='utf-8', newline='\r\n').write(BOI_CANH)
io.open(os.path.join(DIR, 'YEU_CAU.txt'), 'w', encoding='utf-8', newline='\r\n').write(YEU_CAU)

PROMPT = u"""Trong thư mục làm việc có:
- 2 ảnh: `1_MAU_da_len_mau.jpg` (mẫu đã lên màu) · `2_GO_MOC.jpg` (gỗ mộc)
- `SO_LIEU_DO_DUOC.txt` (số đo bằng code) · `CSDLB_danh_muc_26ma.txt` (26 mã) · `CSDLB_bang_mau_in_121o.txt` (121 ô bảng in)
- `BOI_CANH.txt` (bối cảnh + quy tắc) và `YEU_CAU.txt` (yêu cầu chi tiết A–E)

Hãy làm ĐÚNG theo `YEU_CAU.txt`: đề xuất CÔNG THỨC MÀU NỀN cho hệ Dye + Pigment có trong CSDL B
để nhuộm gỗ mộc thành màu như ảnh mẫu. Ghi dần kết quả ra file thật `_agy_cong_thuc_nen_mau.md`
(ghi ngay từng mục A–E, không đợi đến cuối). CHỈ dùng mã có trong 2 file danh mục, tên ghi nguyên văn kèm %.
Kết thúc file bằng dòng: HOAN TAT
"""

t0 = time.time()
print('bắt đầu:', time.strftime('%H:%M:%S'))
r = subprocess.run([AGY, '-p', PROMPT, '--model', 'gemini-3.8-flash-high', '--add-dir', DIR,
                    '--dangerously-skip-permissions', '--output-format', 'json'],
                   capture_output=True, text=True, encoding='utf-8', errors='replace', timeout=3000)
dt = time.time() - t0
io.open(os.path.join(DIR, '_log_agy.txt'), 'w', encoding='utf-8').write(
    'model=gemini-3.8-flash-high\nthoi_gian=%.1f s\n=== STDOUT ===\n%s\n=== STDERR ===\n%s\n' % (dt, r.stdout or '', r.stderr or ''))
print('agy xong sau %.1f s · exit=%s' % (dt, r.returncode))
try:
    import json as _j
    d = _j.loads(r.stdout)
    print('status =', d.get('status') or d.get('result', {}).get('status'))
    print('response:', str(d.get('response') or '')[:400])
    if 'usage' in d:
        print('usage =', _j.dumps(d['usage'], ensure_ascii=False))
except Exception as e:
    print('parse lỗi:', e, (r.stdout or '')[:400])
f = os.path.join(DIR, '_agy_cong_thuc_nen_mau.md')
if os.path.exists(f):
    t = io.open(f, encoding='utf-8', errors='replace').read()
    print('FILE: %d byte · %d dòng | HOAN TAT: %s' % (len(t.encode('utf-8')), t.count('\n') + 1, 'HOAN TAT' in t))
    for m in ('## A', '## B', '## C', '## D', '## E'):
        print('   mục %s: %s' % (m[-1], m in t))
else:
    print('⛔ CHƯA CÓ FILE')
