// Copyright ExByte Studios. Item Interaction Ecosystem.

#pragma once

#include "CoreMinimal.h"
#include "ItemEnums.generated.h"

/**
 * Where an item instance currently lives (section 5).
 * Every state transition is validated server-side through the transaction layer.
 */
UENUM(BlueprintType)
enum class EItemLocationType : uint8
{
	None,
	World,
	Inventory,
	Container,
	Held,
	Equipped,
	PlacementPreview,
	Installed,
	NestedContainer
};

/** Per-property replication scope (section 22). */
UENUM(BlueprintType)
enum class EItemPropertyReplicationPolicy : uint8
{
	None,
	OwnerOnly,
	Everyone,
	NearbyOnly,
	ServerOnly
};

/** How an item is currently carried/equipped on a character (section 11). */
UENUM(BlueprintType)
enum class EHeldItemMode : uint8
{
	None,
	EquippedFromInventory,
	CarryAttached,
	CarryPhysicsHandle,
	PlacementPreview
};

/** High level interaction mode resolved per option (section 8.5). */
UENUM(BlueprintType)
enum class EItemInteractionMode : uint8
{
	None,

	InstantPickup,
	OpenLootUI,
	PickupToInventory,
	EquipFromWorld,
	EquipFromInventory,

	CarryAttached,
	CarryPhysicsHandle,
	DropHeldItem,

	Inspect,
	Use,
	UseHeldOnTarget,
	Combine,

	StartPlacement,
	ConfirmPlacement,
	CancelPlacement,

	InstallIntoWorldSlot,
	RemoveFromWorldSlot,

	TransferContainerItem,
	SplitStack,
	MergeStack
};

/** Container layout / role (section 7.2). */
UENUM(BlueprintType)
enum class EInventoryContainerType : uint8
{
	SlotList,
	Grid,
	Equipment,
	Hotbar,
	VehicleCargo,
	LootBox,
	KeyRing,
	Wallet,
	CraftingInput,
	CraftingOutput
};
