#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "Templates/SubclassOf.h"
#include "BlockFeedbackStyleOverride.h"
#include "BlockFeedbackComponent.generated.h"

class ULocalPlayerTrackerComponent;
class ABlockFeedbackBase;

UCLASS(Blueprintable, meta=(BlueprintSpawnableComponent))
class DBDGAMEPLAY_API UBlockFeedbackComponent : public UActorComponent
{
	GENERATED_BODY()

private:
	UPROPERTY(BlueprintReadWrite, Transient, Instanced, meta=(AllowPrivateAccess=true))
	ULocalPlayerTrackerComponent* _localPlayerTracker;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<ABlockFeedbackBase*> _defaultBlockSelfFeedbacks;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<ABlockFeedbackBase*> _defaultBlockOtherFeedbacks;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TArray<TSubclassOf<ABlockFeedbackBase>> _defaultBlockSelfFeedbackClasses;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TArray<TSubclassOf<ABlockFeedbackBase>> _defaultBlockOtherFeedbackClasses;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	TArray<FBlockFeedbackStyleOverride> _styleOverrides;

private:
	UFUNCTION(BlueprintCallable)
	void OnLocallyObservedChanged();

public:
	UBlockFeedbackComponent();
};

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