# -*- coding: utf-8 -*-
"""校园 5 份复检：文字/手部/悬浮/画质/结构/主题（附各张专项核实）"""
import base64, glob, json, os, requests
from concurrent.futures import ThreadPoolExecutor

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/campus/illustration'

GEN = ("请客观核对这张儿童绘画稿，逐项简短回答（每项一行）：\n"
       "1. 有没有出现任何文字/字母/数字/印章/水印/伪文字？（特别注意黑板、招牌、校牌、笔记本、贴纸）有则原样列出。\n"
       "2. 人物手部：有没有画出分开的手指短线？还是像连指手套/整块圆润色块？有没有畸形、多指、缺手？\n"
       "3. 有没有悬浮在空中、无来源的物体或水珠？有则指出。\n"
       "4. 像不像纸本手绘水彩（笔触、纸纹）而不是电脑平滑填色？是/否+一句。\n"
       "5. 色彩是否和谐？有没有撞色、灰暗沉闷的区域？\n"
       "6. 有没有童趣细节？举出你看到的。\n"
       "7. 结构、比例、透视、常识逻辑错误逐条列出（无则写「无明显错误」）。\n")

SPEC = {
 '1_体育课后的第一杯水.jpg':
   "另外核实：① 有没有孩子在喝水？喝的动作是小口还是一口气猛灌？② 画面里有没有水壶、毛巾、汗滴？在哪里？",
 '2_食堂门口的一杯温开水.jpg':
   "另外核实：① 那个不锈钢热水桶放在什么上面？它的龙头是否装在桶身上、下方是否有东西承接？② 孩子们在做什么？",
 '3_科学课_烧开的水才安全.jpg':
   "另外核实：① 黑板上有没有任何字迹或符号？② 蒸汽出现在哪些地方？（只描述冒汽的物件）③ 从右侧伸进来的手臂，是否与袖子连着？",
 '4_班级饮水角的值日生.jpg':
   "另外核实：① 那台设备外形是什么样？有没有方形机体、按键、内凹接水槽、顶部倒扣大水桶？它像饮水机还是洗手池？② 跪着擦机器的孩子，胳膊与身体是否连在一起？",
 '5_放学路上_水壶在我书包里.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}\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=5) as ex:
    for o in ex.map(qa, files):
        print(o, flush=True)
with ThreadPoolExecutor(max_workers=5) as ex:
    for o in ex.map(name_of, files):
        print(o, flush=True)
