# Hojas de contacto X: Momo Halloween + Tsuki Mommy cow (24 imgs)
# Genera una sheet por personaje y una combinada, con etiqueta de parte.

import pathlib
from PIL import Image, ImageDraw, ImageFont

BASE = pathlib.Path(r"C:\Users\Usuario\Downloads\SD")
OUT = BASE / "Output" / "x_review_sheet.jpg"

SETS = [
    ("MOMO Halloween (test_momo_cosplay7 / Momo X)", BASE / r"Output/test_momo_cosplay7/Momo X"),
    ("TSUKI Mommy cow (test_uzaki / PARA X)", BASE / r"Output/test_uzaki/PARA X"),
]

THUMB_W = 360
LABEL_H = 34
PAD = 8
COLS = 4

def load_sorted(root: pathlib.Path):
    parts = []
    for sub in sorted(root.iterdir()):
        if sub.is_dir():
            files = sorted(sub.glob("*.jpg")) + sorted(sub.glob("*.png"))
            if files:
                parts.append((sub.name, files))
    return parts

def build_sheet(items, cols=4, thumb_w=360, label_h=34, pad=8):
    # items: list of (label, path)
    rows = (len(items) + cols - 1) // cols
    # compute row heights from thumb aspect
    thumbs = []
    for label, p in items:
        im = Image.open(p).convert("RGB")
        r = thumb_w / im.width
        thumbs.append((label, im.resize((thumb_w, int(im.height * r))), p.name))
    cell_h = max(t[1].height for t in thumbs) + label_h + pad * 2
    W = cols * (thumb_w + pad) + pad
    H = rows * cell_h + pad
    sheet = Image.new("RGB", (W, H), (18, 18, 18))
    d = ImageDraw.Draw(sheet)
    try:
        font = ImageFont.load_default(size=14)
    except TypeError:
        font = ImageFont.load_default()
    for i, (label, th, name) in enumerate(thumbs):
        x = pad + (i % cols) * (thumb_w + pad)
        y = pad + (i // cols) * cell_h
        sheet.paste(th, (x, y + label_h))
        d.text((x + 2, y + 4), f"{label}  {name}", fill=(255, 210, 120), font=font)
    return sheet

all_items = []
for title, root in SETS:
    items = []
    for part, files in load_sorted(root):
        short = part.replace(" ", "")
        for f in files:
            items.append((f"{title.split()[0]} {short}", f))
    sheet = build_sheet(items, cols=COLS)
    out = BASE / "Output" / f"x_sheet_{title.split()[0].lower()}.jpg"
    sheet.save(out, quality=88)
    print(out, sheet.size)
    all_items.extend(items)

combined = build_sheet(all_items, cols=6, thumb_w=300)
combined.save(OUT, quality=88)
print(OUT, combined.size)
