"""
Sprockett's community group brand assets.
Follows .claude/rules/design-system.md: #1974CE blue, clean modern aesthetic,
matches Kanamé portal UI, NOT the legacy retro wordmark.
"""
from PIL import Image, ImageDraw, ImageFilter
import os

OUT = os.path.dirname(os.path.abspath(__file__))

BLUE = (25, 116, 206, 255)        # #1974CE
BLUE_DARK = (13, 79, 138, 255)    # #0d4f8a
WHITE = (255, 255, 255, 255)
INK = (26, 26, 46, 255)           # #1a1a2e


def draw_paw(draw: ImageDraw.ImageDraw, cx: int, cy: int, scale: float, color):
    """Centered paw print: 1 main pad + 4 toe beans."""
    # Main pad — wider than tall, sits low
    pad_w = int(scale * 0.95)
    pad_h = int(scale * 0.78)
    pad_top = cy + int(scale * 0.10)
    draw.ellipse(
        [cx - pad_w // 2, pad_top, cx + pad_w // 2, pad_top + pad_h],
        fill=color,
    )

    # Toe beans — 4 of them in an arc above the pad
    toe_w = int(scale * 0.40)
    toe_h = int(scale * 0.50)

    # Inner pair (slightly larger, closer to vertical)
    inner_dx = int(scale * 0.22)
    inner_y = cy - int(scale * 0.55)
    draw.ellipse(
        [cx - inner_dx - toe_w // 2, inner_y,
         cx - inner_dx + toe_w // 2, inner_y + toe_h],
        fill=color,
    )
    draw.ellipse(
        [cx + inner_dx - toe_w // 2, inner_y,
         cx + inner_dx + toe_w // 2, inner_y + toe_h],
        fill=color,
    )

    # Outer pair (slightly smaller, lower & angled out)
    outer_w = int(scale * 0.36)
    outer_h = int(scale * 0.46)
    outer_dx = int(scale * 0.62)
    outer_y = cy - int(scale * 0.32)
    draw.ellipse(
        [cx - outer_dx - outer_w // 2, outer_y,
         cx - outer_dx + outer_w // 2, outer_y + outer_h],
        fill=color,
    )
    draw.ellipse(
        [cx + outer_dx - outer_w // 2, outer_y,
         cx + outer_dx + outer_w // 2, outer_y + outer_h],
        fill=color,
    )


def make_circle_mark(size: int, bg, fg, paw_scale_pct: float = 0.46):
    """Solid coloured circle with a centred paw."""
    # Render at 4x for clean antialiasing, downsample
    SS = 4
    s = size * SS
    img = Image.new("RGBA", (s, s), (0, 0, 0, 0))
    d = ImageDraw.Draw(img)
    # Circle
    d.ellipse([0, 0, s - 1, s - 1], fill=bg)
    # Paw
    paw_scale = int(s * paw_scale_pct)
    draw_paw(d, s // 2, s // 2, paw_scale, fg)
    return img.resize((size, size), Image.LANCZOS)


def make_rounded_square_mark(size: int, bg, fg, radius_pct: float = 0.22, paw_scale_pct: float = 0.50):
    """Rounded-square version (for favicon — square crop, more visible at tiny sizes)."""
    SS = 4
    s = size * SS
    img = Image.new("RGBA", (s, s), (0, 0, 0, 0))
    d = ImageDraw.Draw(img)
    r = int(s * radius_pct)
    d.rounded_rectangle([0, 0, s - 1, s - 1], radius=r, fill=bg)
    paw_scale = int(s * paw_scale_pct)
    draw_paw(d, s // 2, s // 2, paw_scale, fg)
    return img.resize((size, size), Image.LANCZOS)


def make_circle_with_subtle_ring(size: int):
    """Group logo: blue circle, soft inner highlight, white paw. Premium feel."""
    SS = 4
    s = size * SS
    img = Image.new("RGBA", (s, s), (0, 0, 0, 0))
    d = ImageDraw.Draw(img)
    # Outer circle
    d.ellipse([0, 0, s - 1, s - 1], fill=BLUE)
    # Subtle inner highlight ring (very faint white at 8% opacity)
    inset = int(s * 0.06)
    d.ellipse(
        [inset, inset, s - 1 - inset, s - 1 - inset],
        outline=(255, 255, 255, 22),
        width=int(s * 0.012),
    )
    # Paw
    paw_scale = int(s * 0.46)
    draw_paw(d, s // 2, s // 2, paw_scale, WHITE)
    return img.resize((size, size), Image.LANCZOS)


# 1. Group logo — 512×512, transparent canvas, blue circle + white paw
group_logo = make_circle_with_subtle_ring(512)
group_logo.save(os.path.join(OUT, "sprocketts-group-logo-512.png"), optimize=True)

# 1b. Group logo @ 1024 for retina/Kanamé high-DPI fallback
group_logo_2x = make_circle_with_subtle_ring(1024)
group_logo_2x.save(os.path.join(OUT, "sprocketts-group-logo-1024.png"), optimize=True)

# 2. Favicon — 256×256, rounded square (better at 16/32px tab sizes)
favicon_256 = make_rounded_square_mark(256, BLUE, WHITE)
favicon_256.save(os.path.join(OUT, "sprocketts-favicon-256.png"), optimize=True)

# 2b. Favicon @ 32 and 16 for true browser tab use
fav_32 = make_rounded_square_mark(32, BLUE, WHITE, paw_scale_pct=0.55)
fav_32.save(os.path.join(OUT, "sprocketts-favicon-32.png"), optimize=True)

fav_16 = make_rounded_square_mark(16, BLUE, WHITE, paw_scale_pct=0.62)
fav_16.save(os.path.join(OUT, "sprocketts-favicon-16.png"), optimize=True)

# 2c. Inverse favicon (white bg, blue paw) for dark-mode contexts
favicon_inverse = make_rounded_square_mark(256, WHITE, BLUE)
favicon_inverse.save(os.path.join(OUT, "sprocketts-favicon-inverse-256.png"), optimize=True)

# 3. Combined preview sheet
preview = Image.new("RGBA", (1200, 700), (250, 250, 250, 255))
pd = ImageDraw.Draw(preview)

# Header bar
pd.rectangle([0, 0, 1200, 80], fill=(255, 255, 255, 255))
pd.rectangle([0, 79, 1200, 80], fill=(229, 229, 229, 255))

# Place samples
preview.paste(group_logo, (80, 140), group_logo)
preview.paste(favicon_256, (700, 200), favicon_256)
fav_64 = make_rounded_square_mark(64, BLUE, WHITE, paw_scale_pct=0.55)
preview.paste(fav_64, (1000, 230), fav_64)
fav_32_preview = make_rounded_square_mark(32, BLUE, WHITE, paw_scale_pct=0.55)
preview.paste(fav_32_preview, (1100, 246), fav_32_preview)

# Dark band to test mark on dark bg
pd.rectangle([0, 520, 1200, 700], fill=(13, 79, 138, 255))
group_inverse = make_circle_with_subtle_ring(180)
preview.paste(group_inverse, (80, 540), group_inverse)
fav_white = make_rounded_square_mark(120, WHITE, BLUE)
preview.paste(fav_white, (320, 570), fav_white)

preview.save(os.path.join(OUT, "_preview.png"), optimize=True)

print("Built:")
for f in sorted(os.listdir(OUT)):
    if f.endswith(".png"):
        p = os.path.join(OUT, f)
        print(f"  {f}  ({os.path.getsize(p)//1024} KB)")
