#!/usr/bin/env python3
"""Mockups portfolio Rideissime — captures + mises en situation (charte dark / rouge)."""

from __future__ import annotations

import importlib.util
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
SHOTS = ROOT / "assets" / "rideissime-mockups" / "screenshots"
OUT = ROOT / "assets" / "rideissime-mockups"

_hex_path = ROOT / "scripts" / "generate_cabinet_hexagone_mockups.py"
spec = importlib.util.spec_from_file_location("hex_mockups", _hex_path)
hex_mod = importlib.util.module_from_spec(spec)
assert spec.loader is not None
spec.loader.exec_module(hex_mod)

# Charte Rideissime : noir profond / rouge show / paper warm
PALETTE = [(7, 7, 7), (22, 10, 12), (225, 29, 46), (40, 18, 22)]
ACCENT = (225, 29, 46)
FEATURED_SIZE = hex_mod.FEATURED_SIZE
THUMB_SIZE = hex_mod.THUMB_SIZE


def main() -> None:
    from PIL import Image

    OUT.mkdir(parents=True, exist_ok=True)
    gallery_dir = OUT / "gallery"
    gallery_dir.mkdir(exist_ok=True)

    desktop = Image.open(SHOTS / "desktop-home.png").convert("RGB")
    mobile = Image.open(SHOTS / "mobile-home.png").convert("RGB")

    # Featured : Safari + phone frame opaque (bezel Apple trop transparent sur fond dark)
    cw, ch = FEATURED_SIZE
    canvas = hex_mod.cinematic_mesh_gradient(cw, ch, PALETTE, accent=ACCENT).convert("RGBA")
    browser_w = int(cw * 0.64)
    browser = hex_mod.safari_browser_window(desktop, content_width=browser_w, viewport_ratio=9.5 / 16)
    target_phone_h = int(ch * 0.58)
    phone_screen_w = max(260, int(target_phone_h / 2.22))
    phone = hex_mod.mockup_phone_frame(mobile, screen_w=phone_screen_w)

    group_w = browser.width + int(phone.width * 0.42)
    bx = (cw - group_w) // 2
    by = (ch - browser.height) // 2
    px = bx + browser.width - int(phone.width * 0.34)
    py = by + browser.height - int(phone.height * 0.92)

    browser_radius = max(14, int(browser_w * 0.013))
    canvas.alpha_composite(
        hex_mod.drop_shadow(browser.size, browser_radius, blur_px=38, opacity=95, offset=(0, 22)),
        (bx - 76, by - 58),
    )
    canvas.alpha_composite(browser, (bx, by))
    phone_radius = max(28, int(phone.width * 0.16))
    canvas.alpha_composite(
        hex_mod.drop_shadow(phone.size, phone_radius, blur_px=32, opacity=90, offset=(0, 20)),
        (px - 64, py - 48),
    )
    canvas.alpha_composite(phone, (px, py))
    featured = canvas.convert("RGB")

    featured_out = OUT / "rideissime-featured.jpg"
    featured.save(featured_out, "JPEG", quality=93, optimize=True, subsampling=0)
    print(f"saved {featured_out.name} {featured.size}")

    thumb = featured.resize(THUMB_SIZE, Image.Resampling.LANCZOS)
    thumb_out = OUT / "rideissime-thumb.jpg"
    thumb.save(thumb_out, "JPEG", quality=90, optimize=True)
    print(f"saved {thumb_out.name}")

    duo_out = OUT / "rideissime-desktop-mobile.jpg"
    featured.save(duo_out, "JPEG", quality=92, optimize=True)
    print(f"saved {duo_out.name}")

    wow = hex_mod.compose_wow_desktop_featured(
        desktop,
        canvas_size=FEATURED_SIZE,
        palette=PALETTE,
        accent=ACCENT,
        tilt=-0.35,
    )
    wow.save(OUT / "rideissime-featured-desktop.jpg", "JPEG", quality=93, optimize=True, subsampling=0)
    print("saved rideissime-featured-desktop.jpg")

    mobile_mock = hex_mod.phone_mockup(mobile, title="Rideissime")
    mobile_mock.save(OUT / "rideissime-mobile.jpg", "JPEG", quality=90, optimize=True)
    print("saved rideissime-mobile.jpg")

    gallery_jobs = [
        ("desktop-home.png", "rideissime-accueil.jpg", 1700),
        ("desktop-shows.png", "rideissime-shows.jpg", 1700),
        ("desktop-about.png", "rideissime-about.jpg", 1700),
        ("desktop-equipe.png", "rideissime-equipe.jpg", 1700),
        ("desktop-initiations.png", "rideissime-initiations.jpg", 1700),
        ("desktop-contact.png", "rideissime-contact.jpg", 1700),
        ("mobile-home-tall.png", "rideissime-mobile-shot.jpg", 3200),
    ]
    for src_name, out_name, max_h in gallery_jobs:
        src = SHOTS / src_name
        if not src.exists():
            print(f"skip missing {src_name}")
            continue
        hex_mod.export_gallery_shot(src, gallery_dir / out_name, max_height=max_h)
        print(f"saved gallery/{out_name}")

    featured.save(gallery_dir / "rideissime-devices.jpg", "JPEG", quality=92, optimize=True)
    print("saved gallery/rideissime-devices.jpg")


if __name__ == "__main__":
    main()
