#pragma once

#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "StatProperty.h"
#include "CurseAbilityRangeStateData.generated.h"

class UFloatValueStrategy;
class UCurseAbilityAction;

USTRUCT(BlueprintType)
struct FCurseAbilityRangeStateData
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere)
	FGameplayTag StateTag;

	UPROPERTY(EditAnywhere)
	FGameplayTag ModifierFlag;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UFloatValueStrategy* IncrementalPassiveMultiplierValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UFloatValueStrategy* DecrementalPassiveMultiplierValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty IncrementalMultiplierValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty DecrementalMultiplierValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty MinCurseStack;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty MaxCurseStack;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	UFloatValueStrategy* MinCurseTotalValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty MinCursePercentageValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FStatProperty MaxCursePercentageValue;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	TArray<UCurseAbilityAction*> ActionsOnStateEnter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced)
	TArray<UCurseAbilityAction*> ActionsOnStateExit;

public:
	DBDKILLERABILITIES_API FCurseAbilityRangeStateData();
};

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