namespace AcDream.App.UI;
///
/// Where a dragged item came from — the retail InqDropIconInfo flag
/// distinction (flags & 0xE == 0 fresh-from-inventory vs
/// flags & 4 within-list reorder) expressed as a typed enum. The drop
/// handler maps SourceKind + target back to the fresh-vs-reorder decision.
/// Decomp anchors: gmToolbarUI 0x004bd162 / 0x004bd1af; InqDropIconInfo 230533.
///
public enum ItemDragSource { Inventory, ShortcutBar, Equipment, Ground }
///
/// Snapshot of a drag-in-progress, taken at drag-begin (so a server move arriving
/// mid-drag can't mutate it under us). Port of retail's m_dragElement +
/// InqDropIconInfo out-params (objId/container/flags, decomp 230533).
/// SourceContainer is intentionally NOT stored: the handler resolves the
/// LIVE container via ClientObjectTable.Get(ObjId).ContainerId at drop — the
/// same container id retail reads off the dragged element, single source of truth.
///
public sealed record ItemDragPayload(
uint ObjId, // dragged weenie guid (retail itemID, +0x5FC)
ItemDragSource SourceKind, // what kind of slot it left
int SourceSlot, // the source cell's SlotIndex (retail m_lastShortcutNumDragged)
UiItemSlot SourceCell); // back-ref: reorder-restore / clear source state / ghost