#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "UObject/ScriptInterface.h"
#include "GameplayTagContainer.h"
#include "Templates/SubclassOf.h"
#include "DBDConditionFactory.generated.h"

class IConditionReceiver;
class UIsPlayerPerformingInteraction;
class UTimerObject;
class UTimerElapsedCondition;
class UPerk;
class UDoesPerkHaveToken;
class UImposedStatusEffectCondition;
class UStatusEffect;

UCLASS(Blueprintable)
class DBDCOMPETENCE_API UDBDConditionFactory : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	static UIsPlayerPerformingInteraction* IsPlayerPerformingInteraction(TScriptInterface<IConditionReceiver> conditionReceiver, const FGameplayTagContainer& interactionSemantics);

	UFUNCTION(BlueprintCallable)
	static UTimerElapsedCondition* HasTimerElapsedWhileConditionWasTrue(TScriptInterface<IConditionReceiver> conditionReceiver, UTimerObject* timer);

	UFUNCTION(BlueprintCallable)
	static UDoesPerkHaveToken* DoesPerkHaveToken(TScriptInterface<IConditionReceiver> conditionReceiver, UPerk* perk);

	UFUNCTION(BlueprintCallable)
	static UImposedStatusEffectCondition* CreateImposedStatusEffectCondition(TScriptInterface<IConditionReceiver> conditionReceiver, TSubclassOf<UImposedStatusEffectCondition> conditionType, TSubclassOf<UStatusEffect> classType);

public:
	UDBDConditionFactory();
};

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