# -*- coding: utf-8 -*-
"""Giao agy doc anh tai lieu: HUONG DAN QUY TRINH SON THE MAU DL 16/19 (Cong ty Dang Long)."""
import os, shutil, subprocess, sys, json, time
from PIL import Image

SRC = r"C:\Users\admin\AppData\Local\hermes\cache\images\img_359b0bf07a41.jpg"
WS  = r"C:\Claw 2\QC\_agy_tri_0310"
ANH = os.path.join(WS, "anh")
os.makedirs(ANH, exist_ok=True)

dst = os.path.join(ANH, "DL16-19_a.jpg")
shutil.copy2(SRC, dst)
im = Image.open(dst); w, h = im.size
print("anh goc: %dx%d  %.0f KB" % (w, h, os.path.getsize(dst)/1024))
# Upscale nhe neu anh nho -> giup doc chu
if max(w, h) < 2000:
    im2 = im.resize((int(w*2), int(h*2)), Image.LANCZOS)
    up = os.path.join(ANH, "DL16-19_a_2x.jpg")
    im2.save(up, quality=95)
    print("da tao ban 2x:", im2.size, "%.0f KB" % (os.path.getsize(up)/1024))

PROMPT = """Bạn là chuyên gia kỹ thuật sơn gỗ. Thư mục làm việc hiện tại có 2 ảnh CÙNG MỘT trang tài liệu (bản chụp gốc `anh/DL16-19_a.jpg` và bản phóng 2x `anh/DL16-19_a_2x.jpg`): đó là phiếu "HƯỚNG DẪN QUY TRÌNH THỰC HIỆN SƠN THẺ MẪU MÀU: DL 16/19" của CÔNG TY TNHH BT CHEM, áp dụng cho CÔNG TY ĐĂNG LONG (gỗ MDF nội thất, hệ sơn NC, độ bóng 10% ± 5).
Hãy XEM 2 ẢNH đó (đọc kỹ, phóng to khi cần) và TRÍCH XUẤT NGUYÊN VĂN toàn bộ tài liệu thành văn bản có cấu trúc, gồm 5 mục A–E:

A. PHẦN ĐẦU tài liệu: mã số phiếu, ngày ban hành, tên khách hàng, loại sản phẩm/gỗ, hệ sơn, độ bóng, mọi dòng chữ ở đầu phiếu (nguyên văn).
B. BẢNG QUY TRÌNH: mỗi bước 1 dòng, gồm đủ 5 cột: `Bước số | Tên bước & hoá chất (nguyên văn, gồm cả mã sản phẩm) | Tỉ lệ pha | Phương pháp (phun/lau/sấy...) | Thời gian khô & xả nhám`. Trình bày bằng bảng markdown. Giữ ĐÚNG số liệu đọc được, KHÔNG suy đoán; ô nào không đọc được ghi `[không đọc được]`.
C. GHI CHÚ CUỐI PHIẾU: nguyên văn, đánh số như bản gốc (ví dụ điều kiện thời tiết, phụ gia retarder, bảo quản, pha sơn...).
D. TỔNG HỢP SỐ LIỆU: liệt kê dạng gạch đầu dòng — tổng số bước; số lần/loại lớp (lót, màu, glaze, bóng); MỌI tỉ lệ pha; MỌI mốc thời gian khô và xả nhám; các mã sản phẩm xuất hiện.
E. NHẬN XÉT VỀ ĐỘ TIN CẬY: nêu các chỗ chữ mờ/số không rõ hoặc có thể đọc thành 2 cách, mỗi chỗ kèm % tin cậy; nêu rõ phần nào chắc chắn 100%.

LUẬT BẮT BUỘC:
1. GHI DẦN: mở file `ket_qua.md` trong thư mục làm việc và ghi ngay sau khi xong MỖI mục (A, rồi B, rồi C, D, E) — không đợi tới cuối, để kết quả còn lại nếu bị ngắt.
2. Chỉ dùng những gì THỰC SỰ đọc được trong ảnh; tuyệt đối không bịa mã sản phẩm hay tỉ lệ.
3. Ghi cả phần lập luận ngắn khi phân vân đọc (ví dụ: "số này có thể là 5 hoặc 6"), kèm % tin cậy.
4. Zoom/cắt vùng ảnh tối đa 3 lần cho mỗi vùng khó đọc, không làm mãi.
5. Kết thúc: in ra dòng cuối `XONG: <đường dẫn ket_qua.md>` và tóm tắt 5 dòng."""

open(os.path.join(WS, "prompt.txt"), "w", encoding="utf-8").write(PROMPT)

AGY = r"C:\Users\admin\AppData\Local\agy\bin\agy.exe"
MODEL = "gemini-3.8-flash-high"
t0 = time.time()
p = subprocess.run([AGY, "-p", PROMPT, "--model", MODEL, "--add-dir", WS,
                    "--dangerously-skip-permissions", "--output-format", "json",
                    "--print-timeout", "0"], cwd=WS, timeout=1800,
                   capture_output=True, text=True, encoding="utf-8", errors="replace")
dt = time.time() - t0
print("exit=%s  %.1f giay" % (p.returncode, dt))
out = (p.stdout or "") + "\n---STDERR---\n" + (p.stderr or "")
open(os.path.join(WS, "log_agy.txt"), "w", encoding="utf-8").write(out)
try:
    j = json.loads(p.stdout or "{}")
    print("status:", j.get("status"), "| usage:", j.get("usage"))
except Exception:
    print("stdout (500 ky tu dau):", (p.stdout or "")[:500])
kq = os.path.join(WS, "ket_qua.md")
print("ket_qua.md:", os.path.getsize(kq) if os.path.exists(kq) else "CHUA CO")
