#pragma once

#include "CoreMinimal.h"
#include "TimedEffectNumberedChargesSurvivorCollectable.h"
#include "GameplayTagContainer.h"
#include "GameEventData.h"
#include "KeyCollectable.generated.h"

class UFloatValueStrategy;
class USearchableItemStrategy;

UCLASS(Blueprintable)
class DBDSURVIVORCOLLECTABLES_API AKeyCollectable : public ATimedEffectNumberedChargesSurvivorCollectable
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	UFloatValueStrategy* _openedChestAuraRange;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	bool _allowHatchOpenWhileCharge;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	bool _allowOpenChestWithKey;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	USearchableItemStrategy* _searchableItemStrategyOnOpenWithKey;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	USearchableItemStrategy* _searchableItemStrategyOnRummageFromKey;

private:
	UFUNCTION()
	void Authority_OnChestOrHatchOpenedWithKey(const FGameplayTag gameEventType, const FGameEventData& gameEventData);

public:
	AKeyCollectable();
};

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