# -*- coding: utf-8 -*-
"""分别质检 配色图 / 线条图"""
import base64, json, os, sys, glob, requests
from concurrent.futures import ThreadPoolExecutor

CFG = json.load(open('/data/www/files/LhyjdesignPro/config.json'))
API_KEY, BASE = CFG['api_key'], CFG['base_url']
VM = CFG['models']['text_vision']

QC = (
"这是一张给小学四年级用的黑板报设计稿（教室黑板 + 彩色粉笔）。请只描述事实，逐条回答：\n"
"1) 画面顶部那条白色大字标题和下面的黄色小字，有没有被画面里的框线、插图或符号压住、穿过或遮挡？具体是哪几个字？\n"
"2) 除顶部标题和副标题之外，画面里还有没有其他文字、字母、数字、伪文字？有就写出来在哪；没有写「无」。\n"
"3) 画面四周有没有木色/浅色的黑板边框？背景是不是深绿黑板底色加粉笔灰质感？\n"
"4) 画面里有几个留白区域（供学生写字的空白框）？形状和位置分别是什么？内部是不是空的？\n"
"5) 插画有没有 AI 硬伤：元素悬空、线条断裂、人物手臂与身体断开、五官畸形？\n"
"6) 顶部标题字够不够大、醒目？字号与版面比例协调吗？")

QL = (
"这是一张黑板报版式的黑白线条稿（供学生照着画）。请只描述事实，逐条回答：\n"
"1) 是否纯白底 + 纯黑线条？有没有灰色调、阴影、渐变、彩色？\n"
"2) 除顶部标题和副标题外，画面里还有没有其他文字、字母、数字、伪文字？有就写出来在哪；没有写「无」。\n"
"3) 顶部的标题是不是空心字（黑轮廓 + 白色内部）？有没有被画面元素压住？\n"
"4) 画面里有哪些留白框？形状和位置？内部是不是纯白空的？\n"
"5) 有没有元素悬空、线条断裂、人物肢体畸形等硬伤？")

def qa(args):
    p, q = args
    b64 = base64.b64encode(open(p, 'rb').read()).decode()
    for a in range(3):
        try:
            r = requests.post(f"{BASE}/chat/completions",
                headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
                json={"model": VM, "messages": [{"role": "user", "content": [
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
                    {"type": "text", "text": q}]}], "temperature": 0.1}, timeout=300)
            return p, r.json()['choices'][0]['message']['content']
        except Exception as e:
            print('EXC', p, a, e, flush=True)
    return p, 'FAIL'

if __name__ == '__main__':
    jobs = []
    for d, q in (('/data/www/files/heibanbaoArt/color_final', QC), ('/data/www/files/heibanbaoArt/line_final', QL)):
        for f in sorted(glob.glob(os.path.join(d, '*.jpg'))):
            jobs.append((f, q))
    with ThreadPoolExecutor(max_workers=5) as ex:
        for p, t in ex.map(qa, jobs):
            print('\n' + '=' * 70 + f'\n【{p}】\n{t}', flush=True)
