# -*- coding: utf-8 -*-
"""v4 复检：逐条核对 1～6 的修点（中立问法，只问"看到了什么"）"""
import base64, json, os, requests
from concurrent.futures import ThreadPoolExecutor
from PIL import Image

CFG = json.load(open('/data/www/files/LhyjdesignPro/config.json'))
KEY, BASE, MODEL = CFG['api_key'], CFG['base_url'], CFG['models']['text_vision']
ROOT = '/data/www/files/waterHealthArt/final2/illustration'

GEN = ("请客观核对这张儿童绘画稿，逐项简短回答（每项一行）：\n"
       "1. 有没有出现任何文字/字母/数字/印章/水印？有则原样列出，无则写「无」。\n"
       "2. 人物手部：画成了什么形状？像正常的手、还是像手套/连指手套？有没有畸形或缺手？\n"
       "3. 有没有悬浮在空中、无来源的物体或水珠？\n"
       "4. 整体像不像纸本手绘水彩（有笔触轻重与纸纹）而不是电脑平滑填色？是/否+一句。\n"
       "5. 色彩是否和谐、有没有撞色或灰暗沉闷的区域？\n"
       "6. 画面有没有童趣细节（小动物、拟人小水滴、孩子的表情动作等）？举出你看到的。\n"
       "7. 结构、比例、透视、常识逻辑有没有错误？逐条列出（无则写「无明显错误」）。\n")

SPEC = {
 'A_饮水思源_一滴水的旅行.jpg':
   "另外核实：① 画面上方天空里有没有太阳？有没有下雨的云？② 两个喝水的孩子脸上、嘴边或杯子周围"
   "有没有白色的热气线条？（只看孩子面部与杯口）③ 画面里有没有拟人化的小水滴？它们站在哪里？",
 'B_白开水最好喝.jpg':
   "另外核实：① 画面里有没有方糖和饮料瓶？它们处于什么状态、在哪里？② 孩子的手正在做什么动作？"
   "（伸手到方糖上方？握住瓶子？还是举起水杯？）③ 孩子手里举的是什么？",
 'C_接一杯_喝一口_关紧它.jpg':
   "另外核实：① 学生接水的那个装置，外形是什么样？有没有方形机体、按键、内凹接水槽、顶部倒扣的大水桶？"
   "它更像饮水机还是洗手池？② 最右侧那个孩子的胳膊和身体是连在一起的吗？",
}


def qa(fn):
    p = os.path.join(ROOT, fn)
    b64 = base64.b64encode(open(p, 'rb').read()).decode()
    msgs = [{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
        {"type": "text", "text": GEN + "\n" + SPEC[fn]}]}]
    r = requests.post(f"{BASE}/chat/completions",
                      headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
                      json={"model": MODEL, "messages": msgs, "max_tokens": 900}, timeout=230).json()
    return f"===== {fn}  {Image.open(p).size}\n{r['choices'][0]['message']['content'].strip()}\n"


def name_of(fn):
    p = os.path.join(ROOT, fn)
    b64 = base64.b64encode(open(p, 'rb').read()).decode()
    q = "请给这张儿童画起一个作品名（不超过10个字），并另起一行用一句话说明它想宣传的健康习惯。只回答，不要解释。"
    msgs = [{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
        {"type": "text", "text": q}]}]
    r = requests.post(f"{BASE}/chat/completions",
                      headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
                      json={"model": MODEL, "messages": msgs, "max_tokens": 200}, timeout=180).json()
    return f"--- 中性命名 {fn}\n{r['choices'][0]['message']['content'].strip()}\n"


files = sorted(SPEC.keys())
with ThreadPoolExecutor(max_workers=3) as ex:
    for o in ex.map(qa, files):
        print(o, flush=True)
with ThreadPoolExecutor(max_workers=3) as ex:
    for o in ex.map(name_of, files):
        print(o, flush=True)
