// © 2025 Naked People Team. All Rights Reserved.


#include "WearingSlotConstraint.h"

#include "NakedDesire/Clothing/ClothingManager.h"
#include "NakedDesire/Player/NakedDesireCharacter.h"

#define LOCTEXT_NAMESPACE "Commissions.Constraints.WearingSlot"

void UWearingSlotConstraint::OnActivate()
{
	if (Player && Player->ClothingManager)
	{
		Player->ClothingManager->OnClothingEquip.AddUniqueDynamic(this, &UWearingSlotConstraint::HandleClothingChanged);
		Player->ClothingManager->OnClothingUnequip.AddUniqueDynamic(this, &UWearingSlotConstraint::HandleClothingChanged);
	}
}

void UWearingSlotConstraint::OnDeactivate()
{
	if (Player && Player->ClothingManager)
	{
		Player->ClothingManager->OnClothingEquip.RemoveDynamic(this, &UWearingSlotConstraint::HandleClothingChanged);
		Player->ClothingManager->OnClothingUnequip.RemoveDynamic(this, &UWearingSlotConstraint::HandleClothingChanged);
	}
}

bool UWearingSlotConstraint::IsMet() const
{
	if (!Player || !Player->ClothingManager)
		return false;

	return Player->ClothingManager->IsClothingTypeOn(Slot) == bMustBeWorn;
}

void UWearingSlotConstraint::HandleClothingChanged(UClothingItemInstance* ClothingItemInstance)
{
	NotifyChanged();
}

FText UWearingSlotConstraint::GetDescription() const
{
	return bMustBeWorn
		? LOCTEXT("Wearing", "while dressed in the required item")
		: LOCTEXT("NotWearing", "while that slot is bare");
}

#undef LOCTEXT_NAMESPACE