#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "BaseGenerator.generated.h"

class ADBDPlayer;
class UGeneratorDamageComponent;

UINTERFACE(BlueprintType, meta=(CannotImplementInterfaceInBlueprint))
class DEADBYDAYLIGHT_API UBaseGenerator : public UInterface
{
	GENERATED_BODY()
};

class DEADBYDAYLIGHT_API IBaseGenerator : public IInterface
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	virtual void SetFireLevelScoreEventOnFix(bool fireLevelScoreEventOnFix) PURE_VIRTUAL(SetFireLevelScoreEventOnFix, );;

	UFUNCTION(BlueprintCallable)
	virtual bool IsRepaired() const PURE_VIRTUAL(IsRepaired,  return false;);;

	UFUNCTION(BlueprintCallable)
	virtual bool IsBlocked() const PURE_VIRTUAL(IsBlocked,  return false;);;

	UFUNCTION(BlueprintCallable)
	virtual bool IsBeingRepaired() const PURE_VIRTUAL(IsBeingRepaired,  return false;);;

	UFUNCTION(BlueprintCallable)
	virtual bool IsActivated() const PURE_VIRTUAL(IsActivated,  return false;);;

	UFUNCTION(BlueprintCallable)
	virtual TArray<ADBDPlayer*> GetRepairers() const PURE_VIRTUAL(GetRepairers,  return TArray<ADBDPlayer*>(););;

	UFUNCTION(BlueprintCallable)
	virtual UGeneratorDamageComponent* GetGeneratorDamageComponent() const PURE_VIRTUAL(GetGeneratorDamageComponent,  return NULL;);;

	UFUNCTION(BlueprintCallable)
	virtual float GetChargePercentOnLastUpdate() const PURE_VIRTUAL(GetChargePercentOnLastUpdate,  return 0.0f;);;

	UFUNCTION(BlueprintCallable)
	virtual void Authority_CancelRepairInteractions(const TArray<ADBDPlayer*>& repairers) PURE_VIRTUAL(Authority_CancelRepairInteractions, );;

};
