#!/usr/bin/env python3
import argparse, json
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont

parser = argparse.ArgumentParser()
parser.add_argument('--combined', required=True)
parser.add_argument('--out', required=True)
args = parser.parse_args()
combined = json.loads(Path(args.combined).read_text())
rows = combined.get('rows', [])
if not rows:
    raise SystemExit('No rows in combined JSON')
imgs = []
for row in rows:
    p = Path(row.get('screenshot',''))
    if p.exists():
        imgs.append((row, Image.open(p).convert('RGB')))
if not imgs:
    raise SystemExit('No screenshots found')
thumb_w, thumb_h = 420, 315
pad = 26
label_h = 44
cols = min(4, max(1, len(imgs)))
rows_n = (len(imgs) + cols - 1)//cols
W = cols*thumb_w + (cols+1)*pad
H = rows_n*(thumb_h+label_h) + (rows_n+1)*pad + 70
sheet = Image.new('RGB', (W,H), (238,241,245))
d = ImageDraw.Draw(sheet)
try:
    font_title = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', 22)
    font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf', 14)
    small = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 11)
except Exception:
    font_title=font=small=None
d.text((pad,18), combined.get('tag','NEXT11') + ' · Chromium/OpenGL visual QA', fill=(15,23,42), font=font_title)
d.text((pad,46), 'Actual Nex player render · WebGL2/ANGLE/SwiftShader evidence stored in combined JSON', fill=(51,65,85), font=small)
for idx,(row,img) in enumerate(imgs):
    r = idx//cols; c = idx%cols
    x = pad + c*(thumb_w+pad)
    y = 70 + pad + r*(thumb_h+label_h+pad)
    im = img.copy(); im.thumbnail((thumb_w, thumb_h), Image.LANCZOS)
    bg = Image.new('RGB',(thumb_w,thumb_h),(246,248,251))
    bg.paste(im, ((thumb_w-im.width)//2, (thumb_h-im.height)//2))
    sheet.paste(bg,(x,y))
    title = f"{row.get('caseLabel')} · {row.get('viewName')} · {'PASS' if row.get('pass') else 'FAIL'}"
    d.text((x,y+thumb_h+8), title, fill=(15,23,42) if row.get('pass') else (160,20,20), font=font)
    ev=row.get('evidence',{})
    sub=f"{ev.get('caseId','')} phase={ev.get('phase','')} grip={ev.get('gripPass')}"
    d.text((x,y+thumb_h+25), sub, fill=(51,65,85), font=small)
sheet.save(args.out)
print(args.out)
