#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "PlagueUtilities.generated.h"

class ASurvivor;
class ADBDPlayer;
class USurvivorPlagueEffect;
class UObject;
class AMagicFountain;

UCLASS(Blueprintable)
class DEADBYDAYLIGHT_API UPlagueUtilities : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	static bool SurvivorCanBeSickened(const ASurvivor* survivor);

	UFUNCTION(BlueprintCallable)
	static bool IsSuperVomitActive(const ADBDPlayer* player);

	UFUNCTION(BlueprintPure)
	static bool IsPlagueDebugModeActive();

	UFUNCTION(BlueprintPure)
	static bool IsInfected(const ADBDPlayer* player);

	UFUNCTION(BlueprintPure)
	static bool HasMaxLevelSickness(const ADBDPlayer* player);

	UFUNCTION(BlueprintPure)
	static USurvivorPlagueEffect* GetPlagueEffect(const ADBDPlayer* player);

	UFUNCTION(BlueprintCallable)
	static TArray<AMagicFountain*> GetCorruptedFountains(UObject* worldContext);

	UFUNCTION(BlueprintCallable)
	static TArray<AMagicFountain*> GetCleanFountains(UObject* worldContext);

	UFUNCTION(BlueprintCallable)
	static TArray<AMagicFountain*> GetAllFountains(UObject* worldContext);

	UFUNCTION(BlueprintCallable)
	static void Authority_CorruptRandomFountain(UObject* worldContext);

	UFUNCTION(BlueprintCallable)
	static void Authority_AddSicknessToPlayer(ADBDPlayer* player, float sicknessToAdd);

public:
	UPlagueUtilities();
};

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