using System;
using System.Numerics;
using AcDream.App.Rendering;
namespace AcDream.App.UI;
///
/// Icon-list cell for non-weenie catalog entries such as spells and components.
/// It reuses the retail UIItemList geometry without pretending a spell id is an
/// object GUID; catalog drags stay distinct from physical item drag/drop.
///
public sealed class UiCatalogSlot : UiItemSlot
{
public uint EntryId { get; set; }
public uint CatalogIconTexture { get; set; }
/// Optional second 32x32 layer (retail spell endowment item icon).
public uint CatalogOverlayTexture { get; set; }
public string Label { get; set; } = string.Empty;
public string? Detail { get; set; }
public bool ShowLabel { get; init; }
public uint BackgroundSprite { get; init; }
public UiDatFont? LabelFont { get; init; }
public Vector4 LabelColor { get; init; } = new(0.92f, 0.88f, 0.70f, 1f);
/// Retail LayoutDesc property 0x21 (two-pass glyph outline,
/// UIElement_Text::SetOutline @0x0046a81c). Catalog slots are
/// controller-built (no authored element), so this is settable-only, for
/// parity with the other text-bearing widgets (round-5 review S2 —
/// per-STATE switching is AP-192).
public bool Outline { get; init; }
/// Retail LayoutDesc property 0x22 (m_curOutlineColor,
/// ctor default black). Only meaningful when is true.
public Vector4 OutlineColor { get; init; } = UiRenderContext.DefaultOutlineColor;
public float IconLeft { get; init; }
public float IconTop { get; init; }
public float IconWidth { get; init; }
public float IconHeight { get; init; }
public float LabelLeft { get; init; }
public float LabelWidth { get; init; }
public bool SelectionBehindContent { get; init; }
public new Action? Clicked { get; set; }
public new Action? DoubleClicked { get; set; }
public object? CatalogDragPayload { get; init; }
public Action