from pathlib import Path
from PIL import Image, ImageDraw, ImageFont

SOURCE = Path('/home/ubuntu/upload/figma/c6z3OahD9h9nFRdnob49AT')
OUTPUT = SOURCE / 'contact-sheets'
OUTPUT.mkdir(exist_ok=True)

GROUPS = {
    '01-onboarding': ['1-2', '1-33', '18-349', '18-350', '2-2', '17-158'],
    '02-discovery': ['21-521', '187-1582', '187-1711', '189-1841', '189-1996', '36-1444', '21-643', '27-757', '189-2123'],
    '03-home-orders': ['472-726', '474-1084', '474-1261', '474-1465', '474-1881', '474-1655'],
    '04-system-states': ['458-51', '458-76', '458-136', '458-200', '458-254', '458-347', '458-321'],
    '05-task-core': ['478-2371', '479-2525', '479-2705', '479-2613', '482-3031', '482-3235', '482-3032', '484-3423'],
    '06-task-evidence': ['493-3646', '493-3842', '493-4015', '500-4390', '500-4669', '500-4871', '501-5766'],
}

THUMB_WIDTH = 200
THUMB_HEIGHT = 425
LABEL_HEIGHT = 34
MARGIN = 16
COLUMNS = 3
FONT = ImageFont.load_default()

for group, ids in GROUPS.items():
    rows = (len(ids) + COLUMNS - 1) // COLUMNS
    sheet_width = (COLUMNS * THUMB_WIDTH) + ((COLUMNS + 1) * MARGIN)
    sheet_height = (rows * (THUMB_HEIGHT + LABEL_HEIGHT)) + ((rows + 1) * MARGIN)
    canvas = Image.new('RGB', (sheet_width, sheet_height), '#eef1f4')
    draw = ImageDraw.Draw(canvas)
    for index, node_id in enumerate(ids):
        source = SOURCE / node_id / 'content' / 'frame.webp'
        image = Image.open(source).convert('RGB')
        image.thumbnail((THUMB_WIDTH, THUMB_HEIGHT), Image.Resampling.LANCZOS)
        col = index % COLUMNS
        row = index // COLUMNS
        x = MARGIN + col * (THUMB_WIDTH + MARGIN)
        y = MARGIN + row * (THUMB_HEIGHT + LABEL_HEIGHT + MARGIN)
        frame_x = x + (THUMB_WIDTH - image.width) // 2
        frame_y = y + (THUMB_HEIGHT - image.height) // 2
        canvas.paste(image, (frame_x, frame_y))
        draw.rectangle((x, y + THUMB_HEIGHT, x + THUMB_WIDTH, y + THUMB_HEIGHT + LABEL_HEIGHT), fill='#0c203b')
        text_box = draw.textbbox((0, 0), node_id, font=FONT)
        text_x = x + (THUMB_WIDTH - (text_box[2] - text_box[0])) // 2
        draw.text((text_x, y + THUMB_HEIGHT + 11), node_id, fill='#f0c85a', font=FONT)
    canvas.save(OUTPUT / f'{group}.png')
