# -*- coding: utf-8 -*-
"""Giao AGY đọc 11 bảng màu tải từ https://mausac.ngoducminh.com/danh-sach-mau.html"""
import io, os, subprocess, time

DIR = r'C:\Claw 2\Nghien cuu\Du-an-B-He-mau-Stain-Glaze\trang-mausac'
IMG = os.path.join(DIR, 'images')
AGY = r'C:\Users\admin\AppData\Local\agy\bin\agy.exe'

BOI_CANH = u"""BỐI CẢNH — đọc 11 ảnh bảng màu của trang web https://mausac.ngoducminh.com/danh-sach-mau.html
(tải ngày 06/10/2026, lưu trong thư mục images\\ cạnh file này).

Trang web chia 2 nhóm màu:
1. NHÓM MÀU DYE (màu tan) — theo trang: Vàng (Vàng BT · Vàng 412 · Vàng Y57 · Vàng cam 210K) ·
   Đỏ (Đỏ BT · Đỏ VM 334 · Đỏ 334 · Đỏ 3311 · Đỏ R95) · Đen (Đen BT · Đen K (1–10) · Đen 821 · Đen B51) ·
   Xanh (Xanh lá 520K · Xanh dương BL 06).
2. NHÓM MÀU PIGMENT (màu đặc) — Vàng (Vàng cam 2RA · Vàng H4G · Vàng YS618 · Vàng YB 87 · Vàng 7415C ·
   Vàng YZ2288 (1–1) DM) · Đỏ (Đỏ Super · Đỏ New Super · Đỏ F3RK · Đỏ RS718 · Đỏ RB 97 · Đỏ R04597 (1–1) DM ·
   Đỏ R250 (1–1) DM) · Đen (Đen TCL3 · Đen BT M100S · Đen TC1402) · Xanh (Xanh lá GT · Xanh A2711 ·
   Xanh dương 4GA · Giant Blue) · Nâu (Nâu BS1008 · Nâu BR 78 · Nâu BU5511) ·
   Hồng (Giant Rose · Hồng Magenta PS38) · Base trắng (Stain NC trắng · Stain K25 trắng · Paste trắng 59).

Ảnh bảng chi tiết:
- DANH SÁCH CHUNG: danh-sach-mau.jpg
- DYE chi tiết: danh-sach-mau-dye-bang-1.jpg … bang-4.jpg
- PIGMENT chi tiết: danh-sach-mau-pigment-bang-1.jpg … bang-6.jpg

Đây là ảnh CHỤP bảng in trên giấy (có ô màu in sẵn + dòng chữ in dưới mỗi ô). Mỗi mã màu thường có nhiều ô
ứng với các nồng độ pha khác nhau (ví dụ 5 % · 10 % · 30 %).

GHI CHÚ: chỉ trích đúng điều NHÌN THẤY trên ảnh. Chữ nào không đọc chắc thì ghi “không đọc chắc”,
KHÔNG tự đoán tên màu. Không bịa số liệu.
"""

YEU_CAU = u"""Đọc lần lượt 11 ảnh trong thư mục images\\:
danh-sach-mau.jpg · danh-sach-mau-dye-bang-1..4.jpg · danh-sach-mau-pigment-bang-1..6.jpg

GHI KẾT QUẢ DẦN RA FILE THẬT tên `_agy_bang_mau_web.md` trong thư mục này (ghi từng ảnh ngay khi đọc xong, không đợi hết).

Với TỪNG ảnh, ghi đúng 3 phần:
A. **Cấu trúc**: bảng có bao nhiêu HÀNG ô màu, mỗi hàng bao nhiêu Ô, có ô nào để trống không.
B. **Danh sách ô màu** theo thứ tự ĐỌC: hàng trên xuống, mỗi hàng trái sang phải. Mỗi ô ghi:
   `hàng-cột | nhãn in dưới ô (nguyên văn, gồm tên/mã màu và nồng độ % nếu có) | tông màu nhìn thấy ngắn gọn`.
   Ví dụ: `1-1 | Vàng BT (5%) | vàng tươi sáng`.
   Nếu một số ô không có nhãn ⇒ ghi `(không có nhãn)`.
C. **Ghi chú**: chỗ chữ mờ/không đọc chắc, chỗ ảnh bị lóa/che khuất.

Được phép cắt phóng to (zoom) tối đa 3 lần cho ảnh có chữ nhỏ.
Sau khi đọc hết 11 ảnh, in dòng cuối cùng: HOAN TAT
"""

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

PROMPT = u"""Trong thư mục làm việc có file BOI_CANH.txt (bối cảnh trang web) và YEU_CAU.txt (yêu cầu chi tiết),
cùng thư mục images\\ chứa 11 ảnh bảng màu.

Hãy làm ĐÚNG theo YEU_CAU.txt: đọc từng ảnh, ghi dần kết quả ra file thật `_agy_bang_mau_web.md`
(ghi ngay từng phần, không đợi đến cuối). Mỗi ảnh ghi rõ: A. cấu trúc hàng/ô · B. danh sách ô màu theo thứ tự
trái→phải, trên→xuống (nhãn nguyên văn + tông màu nhìn thấy) · C. ghi chú chỗ mờ/khó đọc.
Được phép zoom tối đa 3 lần. 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 '')[:300])
    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_bang_mau_web.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))
else:
    print('⛔ CHƯA CÓ FILE')
