# -*- coding: utf-8 -*-
"""agy doc BAN BAO CAO viet tay cua Loc QC ngay 03/10/2026 (3 anh) -> ket_qua_loc.md"""
import os, shutil, subprocess, json, time
from PIL import Image

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

srcs = [("img_039ec1d16cf4.jpg", "loc0310_01"), ("img_01527756cd85.jpg", "loc0310_02"), ("img_d32e974608a2.jpg", "loc0310_03")]
for i, (s, tag) in enumerate(srcs, 1):
    p = os.path.join(CACHE, s)
    if not os.path.exists(p):
        print("THIEU:", p); continue
    dst = os.path.join(ANH, tag + ".jpg")
    shutil.copy2(p, dst)
    im = Image.open(dst); w, h = im.size
    print("%s: %dx%d %.0f KB" % (tag, w, h, os.path.getsize(dst)/1024))
    if max(w, h) < 2400:
        f = 3 if max(w, h) < 1200 else 2
        im.resize((w*f, h*f), Image.LANCZOS).save(os.path.join(ANH, "%s_%dx.jpg" % (tag, f)), quality=95)
        print("   -> phong %dx" % f)

PROMPT = """Bạn là chuyên gia kỹ thuật sơn gỗ kiêm QC. Thư mục làm việc có các ảnh (bản gốc + bản phóng to) chụp **BẢN BÁO CÁO viết tay** của nhân viên QC **BÙI THIÊN LỘC**, đề ngày **03/10/2026**, kiểm tra tại **CÔNG TY MINH HÙNG TIẾN (nhà máy cũ)**, gửi Ban Kỹ thuật & QC BT-Chem.

Hãy ĐỌC KỸ các ảnh (phóng to khi cần) và **TRÍCH XUẤT NGUYÊN VĂN** toàn bộ báo cáo thành văn bản có cấu trúc:

A. **PHẦN ĐẦU**: tên biểu mẫu, người lập (họ tên, chức danh nếu có), ngày, nơi kiểm tra, kính gửi, mọi dòng chữ ở đầu trang (nguyên văn).
B. **NỘI DUNG CHÍNH**: từng mục/đoạn theo đúng thứ tự trong báo cáo — giữ nguyên văn, kể cả viết tắt và lỗi chính tả. Với MỌI số liệu xuất hiện (mã sản phẩm, mã số sản xuất/lô, ngày tháng, khối lượng, độ ẩm %, nhiệt độ, số người, số mẫu...) ghi rõ số đó nằm ở mục nào và nói về cái gì. Nếu báo cáo có bảng thì dựng lại bảng markdown nguyên văn (giữ đúng số hàng/cột, ô trống ghi `—`).
C. **PHẦN CUỐI**: đề xuất/kiến nghị, danh sách việc cần theo dõi, chữ ký, tên người ký, dấu (nếu có) — nguyên văn.
D. **BẢNG TỔNG HỢP MỌI CON SỐ**: liệt kê đủ mọi con số/mã xuất hiện trong cả báo cáo (kèm đơn vị và ý nghĩa) — đây là phần quan trọng nhất để đối chiếu sau này.
E. **ĐIỂM CHƯA CHẮC CHẮN**: mọi chỗ chữ mờ/số đọc được theo 2 cách trở lên, mỗi chỗ nêu các cách đọc + % 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** ra file `ket_qua_loc.md` trong thư mục làm việc: ghi ngay sau mỗi mục (A, rồi B, C, D, E) — không đợi tới cuối, để kết quả còn lại nếu bị ngắt.
2. Chỉ ghi cái **THỰC SỰ đọc được**; tuyệt đối KHÔNG bịa mã lô, mã sản phẩm hay số liệu. Chỗ không đọc được ghi `[không đọc được]`.
3. Đặc biệt chú ý đọc đúng **mã sản phẩm và mã số sản xuất (MSSX/lô)** — thường là dãy số ngày-tháng (ví dụ dạng `ddmmyy`) hoặc `MSSX ...`; nếu có nhiều cách đọc thì ghi hết kèm % tin cậy, KHÔNG tự chọn.
4. Zoom/cắt vùng ảnh tối đa 3 lần cho mỗi vùng khó đọc.
5. Nếu ảnh nào không có chữ đọc được thì nói rõ.
6. Kết thúc in ra dòng `XONG: <đường dẫn ket_qua_loc.md>` + 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"
t0 = time.time()
p = subprocess.run([AGY, "-p", PROMPT, "--model", "gemini-3.8-flash-high", "--add-dir", WS,
                    "--dangerously-skip-permissions", "--output-format", "json",
                    "--print-timeout", "0"], cwd=WS, timeout=2400,
                   capture_output=True, text=True, encoding="utf-8", errors="replace")
print("exit=%s  %.1f giay" % (p.returncode, time.time()-t0))
open(os.path.join(WS, "log_agy.txt"), "w", encoding="utf-8").write((p.stdout or "") + "\n---STDERR---\n" + (p.stderr or ""))
try:
    j = json.loads(p.stdout or "{}"); print("status:", j.get("status"))
except Exception:
    print("stdout 400:", (p.stdout or "")[:400])
kq = os.path.join(WS, "ket_qua_loc.md")
print("ket_qua_loc.md:", os.path.getsize(kq) if os.path.exists(kq) else "CHUA CO")
