#pragma once

#include "CoreMinimal.h"
#include "Collectable.h"
#include "BaseSurvivorCollectable.generated.h"

class USpherePlayerOverlapComponent;
class UInteractor;
class UDropItemInteraction;
class UCollectItemInteraction;
class USphereComponent;
class UDBDOutlineComponent;
class UMaterialHelper;
class USurvivorCollectableOutlineUpdateStrategy;
class ADBDPlayer;

UCLASS(Blueprintable)
class DBDGAMEPLAY_API ABaseSurvivorCollectable : public ACollectable
{
	GENERATED_BODY()

public:
	DECLARE_DYNAMIC_DELEGATE_OneParam(FOnCollectorSetBPDelegate, ADBDPlayer*, player);

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	USpherePlayerOverlapComponent* _interactable;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UInteractor* _collectableInteractor;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UDropItemInteraction* _dropInteraction;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UCollectItemInteraction* _collectInteraction;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	USphereComponent* _infectablePrimitive;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UDBDOutlineComponent* _outlineComponent;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UMaterialHelper* _materialHelper;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	USurvivorCollectableOutlineUpdateStrategy* _survivorCollectableOutlineUpdateStrategy;

public:
	ABaseSurvivorCollectable();
};

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