"""Invert app-icon: cream B on transparent + sampled brand colours."""
from __future__ import annotations

import json
from pathlib import Path

import numpy as np
from PIL import Image

ROOT = Path(__file__).resolve().parents[2]
SRC = ROOT / "assets" / "app-icon.png"
OUT_LOGO = ROOT / "assets" / "splash-logo.png"
OUT_META = ROOT / "assets" / "splash-colors.json"


def _hex(rgb: tuple[int, int, int]) -> str:
    return "#{:02X}{:02X}{:02X}".format(*rgb)


def main() -> None:
    arr = np.array(Image.open(SRC).convert("RGBA"), dtype=np.float32)
    alpha = arr[:, :, 3]
    rgb = arr[:, :, :3]
    opaque = alpha > 200
    lum = 0.299 * rgb[:, :, 0] + 0.587 * rgb[:, :, 1] + 0.114 * rgb[:, :, 2]

    cream = tuple(int(round(x)) for x in np.mean(rgb[opaque & (lum > 200)], axis=0))
    green = tuple(int(round(x)) for x in np.mean(rgb[opaque & (lum < 120)], axis=0))

    out = np.zeros(arr.shape, dtype=np.uint8)
    fg = opaque & (lum < 120)
    out[fg, 0:3] = cream
    out[fg, 3] = 255
    Image.fromarray(out).save(OUT_LOGO)

    OUT_META.write_text(
        json.dumps({"cream": _hex(cream), "green": _hex(green)}, indent=2),
        encoding="utf-8",
    )
    print(f"cream={_hex(cream)} green={_hex(green)}")


if __name__ == "__main__":
    main()
