// Copyright ExByte Studios. Item Interaction Ecosystem.

#pragma once

#include "CoreMinimal.h"
#include "InteractionAction.h"
#include "ItemInteractionActions.generated.h"

/**
 * Concrete interaction actions (section 16). These are the Blueprint-droppable
 * authoring units: add one to an InteractableComponent's AvailableActions and the
 * resolver/executor will surface and run it. Built-in modes are also dispatched
 * directly by the interaction component, so both paths reach the same effect.
 */

UCLASS(meta = (DisplayName = "Action: Instant Pickup"))
class ITEMINTERACTION_API UInteractionAction_InstantPickup : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_InstantPickup();
	virtual void Execute_Implementation(const FInteractionContext& Context) override;
};

UCLASS(meta = (DisplayName = "Action: Open Loot UI"))
class ITEMINTERACTION_API UInteractionAction_OpenLootUI : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_OpenLootUI();
};

UCLASS(meta = (DisplayName = "Action: Inspect"))
class ITEMINTERACTION_API UInteractionAction_Inspect : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_Inspect();
	virtual void Execute_Implementation(const FInteractionContext& Context) override;
};

UCLASS(meta = (DisplayName = "Action: Combine"))
class ITEMINTERACTION_API UInteractionAction_Combine : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_Combine();
};

UCLASS(meta = (DisplayName = "Action: Transfer Container Item"))
class ITEMINTERACTION_API UInteractionAction_TransferContainerItem : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_TransferContainerItem();
};

UCLASS(meta = (DisplayName = "Action: Split Stack"))
class ITEMINTERACTION_API UInteractionAction_SplitStack : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_SplitStack();
};

UCLASS(meta = (DisplayName = "Action: Merge Stack"))
class ITEMINTERACTION_API UInteractionAction_MergeStack : public UInteractionAction
{
	GENERATED_BODY()
public:
	UInteractionAction_MergeStack();
};
