from pathlib import Path
from PIL import Image, ImageDraw

ROOT = Path(__file__).resolve().parent
INPUTS = ROOT / "inputs"
INPUTS.mkdir(exist_ok=True)

# One deliberately synthetic, transparent icon; no customer or third-party image.
scale = 4
canvas = Image.new("RGBA", (256 * scale, 256 * scale), (0, 0, 0, 0))
draw = ImageDraw.Draw(canvas)
draw.rounded_rectangle((24 * scale, 24 * scale, 232 * scale, 232 * scale), radius=44 * scale,
                       fill=(26, 76, 105, 255), outline=(139, 211, 255, 255), width=8 * scale)
draw.ellipse((69 * scale, 66 * scale, 187 * scale, 184 * scale), fill=(185, 243, 109, 230))
draw.polygon([(122 * scale, 78 * scale), (145 * scale, 121 * scale), (189 * scale, 128 * scale),
              (157 * scale, 158 * scale), (165 * scale, 201 * scale), (126 * scale, 179 * scale),
              (87 * scale, 201 * scale), (95 * scale, 158 * scale), (63 * scale, 128 * scale),
              (107 * scale, 121 * scale)], fill=(255, 255, 255, 210))
image = canvas.resize((256, 256), Image.Resampling.LANCZOS)

image.save(INPUTS / "same-icon.png", format="PNG", optimize=False)
background = Image.new("RGBA", image.size, (255, 255, 255, 255))
Image.alpha_composite(background, image).convert("RGB").save(
    INPUTS / "same-icon.jpg", format="JPEG", quality=95, subsampling=0
)
image.save(INPUTS / "same-icon.webp", format="WEBP", lossless=True, method=6)

# Palette GIF with an explicit transparent palette entry.
gif = image.convert("P", palette=Image.Palette.ADAPTIVE, colors=255)
alpha = image.getchannel("A")
mask = alpha.point(lambda value: 255 if value == 0 else 0)
gif.paste(255, mask=mask)
palette = gif.getpalette() or []
palette.extend([0] * (768 - len(palette)))
palette[255 * 3:255 * 3 + 3] = [0, 0, 0]
gif.putpalette(palette)
gif.info["transparency"] = 255
gif.save(INPUTS / "same-icon.gif", format="GIF", transparency=255, optimize=False)

for file in sorted(INPUTS.iterdir()):
    with Image.open(file) as opened:
        print(f"{file.name},{opened.format},{opened.size[0]}x{opened.size[1]},{file.stat().st_size}")
