import os, re, sys, json; sys.path.insert(0,"/app")
from concurrent.futures import ThreadPoolExecutor
sys.path.insert(0,"/app")
from app.database import SessionLocal
from app.models.question import Question
from app.services.ai_service import get_model_for_task
from scripts.triage_question_images import deterministic_verdict, classify, image_bytes
db = SessionLocal()
qs = db.query(Question).filter(Question.image_path.isnot(None), Question.image_path != "").order_by(Question.id).all()
unk = [q for q in qs if deterministic_verdict(q.question_text, q.explanation) == "unknown"]
model, key = get_model_for_task(db, "extraction")
with ThreadPoolExecutor(max_workers=6) as p:
    res = list(p.map(lambda q: (q, classify(q.question_text, q.explanation, q.image_path, model, key)), unk))
os.makedirs("/out2", exist_ok=True)
out = []
for q, a in res:
    out.append({"id": q.id, "path": q.image_path, **a})
    got = image_bytes(q.image_path)
    if got:
        data, mt = got
        open(f"/out2/{a['belongs']}_q{q.id}{'.png' if 'png' in mt else '.jpg'}","wb").write(data)
json.dump(out, open("/out2/verdicts.json","w"), indent=1)
for r in out: print(f"{r['belongs']:12s} {r['confidence']:.2f} q{r['id']:5d} {r['reason'][:110]}")
