"""Brand icons for the sidebar — the Logo.tsx mark, contained here like on the web.

`icon(name)` returns an `icon_value` for layout calls, or 0 when previews are
unavailable (headless tests stub bpy without bpy.utils.previews) so draw code
never needs its own guard. Hand-mirrored with utsubo_utsbv/brand.py — each addon
ships self-contained. Regenerate PNGs via scripts/generate_brand_icons.py.
"""

from __future__ import annotations

from pathlib import Path

_previews = None


def icon(name: str) -> int:
    global _previews
    if _previews is None:
        try:
            import bpy.utils.previews

            _previews = bpy.utils.previews.new()
            for png in sorted((Path(__file__).parent / "icons").glob("*.png")):
                _previews.load(png.stem, str(png), "IMAGE")
        except Exception:
            _previews = False
    if not _previews:
        return 0
    entry = _previews.get(name)
    return entry.icon_id if entry else 0


def release() -> None:
    global _previews
    if _previews:
        try:
            import bpy.utils.previews

            bpy.utils.previews.remove(_previews)
        except Exception:
            pass
    _previews = None
