// Copyright (c) 2026 GregOrigin. All Rights Reserved.
#include "URPGInventoryComponent.h"

URPGInventoryComponent::URPGInventoryComponent()
{
	PrimaryComponentTick.bCanEverTick = false;
	MaxSlots = 20;
	MaxWeight = 100.0f;
	CurrentWeight = 0.0f;
}

bool URPGInventoryComponent::AddItem(const FRPGItemData& Item)
{
	if (Items.Num() >= MaxSlots) return false;
	float NewWeight = CurrentWeight + Item.ItemWeight * Item.StackCount;
	if (NewWeight > MaxWeight) return false;
	Items.Add(Item);
	CurrentWeight = NewWeight;
	OnItemAdded.Broadcast();
	OnInventoryChanged.Broadcast();
	return true;
}

bool URPGInventoryComponent::RemoveItem(int32 SlotIndex)
{
	if (!Items.IsValidIndex(SlotIndex)) return false;
	CurrentWeight -= Items[SlotIndex].ItemWeight * Items[SlotIndex].StackCount;
	CurrentWeight = FMath::Max(0.f, CurrentWeight);
	Items.RemoveAt(SlotIndex);
	OnInventoryChanged.Broadcast();
	return true;
}

int32 URPGInventoryComponent::GetItemCount() const
{
	return Items.Num();
}