# -*- coding: utf-8 -*-
"""横版线条图质检：在常规 6 问基础上，加问「不借助文字能否一眼看懂科学饮水主题」"""
import base64, glob, json, os, sys, 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']

Q = ("请严格简短回答（每项一行，不要展开、不要加小标题）：\n"
     "1. 是否出现任何文字/字母/数字/印章/水印/伪文字？有则原样列出，无则写「无」。\n"
     "2. 画面中心主体一句话概括。\n"
     "3. 是否为纯白描线条稿（只有黑线、纯白底，无阴影/灰阶/彩色填充）？（是/否+一句）\n"
     "4. 是否为前景+中景+背景三层、有人物动作与表情、儿童可描摹的中等复杂度场景？（是/否+一句）\n"
     "5. 完全不借助任何文字，观众能否一眼看懂这是「科学饮水·健康饮水」主题？（是/否+一句）\n"
     "6. 是否有悬空物体/明显变形/多余肢体？（无/有-简述）\n")


def qa(path):
    b64 = base64.b64encode(open(path, 'rb').read()).decode()
    msgs = [{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
        {"type": "text", "text": Q}]}]
    try:
        r = requests.post(f"{BASE}/chat/completions",
                          headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
                          json={"model": MODEL, "messages": msgs, "max_tokens": 500}, timeout=180).json()
        txt = (r.get('choices') or [{}])[0].get('message', {}).get('content') or 'ERR ' + json.dumps(r, ensure_ascii=False)[:150]
    except Exception as e:
        txt = f'EXC {e}'
    return f"===== {os.path.basename(path)}\n{txt.strip()}\n"


if __name__ == '__main__':
    paths = []
    for a in sys.argv[1:]:
        paths += sorted(glob.glob(os.path.join(a, '*.jpg'))) if os.path.isdir(a) else [a]
    with ThreadPoolExecutor(max_workers=5) as ex:
        for out in ex.map(qa, paths):
            print(out, flush=True)
