#pragma once

#include "CoreMinimal.h"
#include "EPerkCategory.h"
#include "EOfferingCategory.h"
#include "EInventoryItemType.h"
#include "EItemRarity.h"
#include "EStatusEffectType.h"
#include "EItemAvailability.h"
#include "SpecialEventUIInfo.h"
#include "ELoadoutPartState.h"
#include "ESkillCategory.h"
#include "EItemSourceTag.h"
#include "InventorySlotData.generated.h"

USTRUCT(BlueprintType)
struct FInventorySlotData
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintReadWrite, Transient)
	FName ItemId;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString IconFilePath;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString DisplayName;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString ParentId;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString ParentDisplayName;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString ParentTypeDisplayName;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsParentAvailable;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString Description;

	UPROPERTY(BlueprintReadWrite, Transient)
	TArray<EPerkCategory> PerkCategory;

	UPROPERTY(BlueprintReadWrite, Transient)
	EOfferingCategory OfferingCategory;

	UPROPERTY(BlueprintReadWrite, Transient)
	EInventoryItemType ItemType;

	UPROPERTY(BlueprintReadWrite, Transient)
	EItemRarity Rarity;

	UPROPERTY(BlueprintReadWrite, Transient)
	EStatusEffectType StatusEffectType;

	UPROPERTY(BlueprintReadWrite, Transient)
	int32 Level;

	UPROPERTY(BlueprintReadWrite, Transient)
	FText Subtitle;

	UPROPERTY(BlueprintReadWrite, Transient)
	int32 StackCount;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsStackFull;

	UPROPERTY(BlueprintReadWrite, Transient)
	EItemAvailability Availability;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsEquipped;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsTeachablePerk;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsSlasherPerk;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsPerkAvailableInFearMarket;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsPerkAvailableInBloodWeb;

	UPROPERTY(BlueprintReadWrite, Transient)
	int32 TeachableLevel;

	UPROPERTY(BlueprintReadWrite, Transient)
	FString DlcDisplayName;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsLocked;

	UPROPERTY(BlueprintReadWrite, Transient)
	FSpecialEventUIInfo EventInfo;

	UPROPERTY(BlueprintReadWrite, Transient)
	int32 UnlockableLevel;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsLimitedItem;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsPrivateIcon;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsEnabled;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsSharablePerk;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsRandomPerk;

	UPROPERTY(BlueprintReadWrite, Transient)
	ELoadoutPartState LoadoutPartState;

	UPROPERTY(BlueprintReadWrite, Transient)
	ESkillCategory SkillCategory;

	UPROPERTY(BlueprintReadWrite, Transient)
	bool IsSkillUnlockable;

	UPROPERTY(BlueprintReadWrite, Transient)
	EItemSourceTag ItemSourceTags;

	UPROPERTY(BlueprintReadWrite, Transient)
	TArray<FText> SearchTags;

	UPROPERTY(BlueprintReadWrite, Transient)
	int32 WarningMessageLength;

public:
	DEADBYDAYLIGHT_API FInventorySlotData();
};

FORCEINLINE uint32 GetTypeHash(const FInventorySlotData) { return 0; }
