#pragma once

#include "CoreMinimal.h"
#include "DBDPlayerAudioHandlerComponent.h"
#include "DBDTunableRowHandle.h"
#include "GameplayTagContainer.h"
#include "EAttackType.h"
#include "KillerAudioHandlerComponent.generated.h"

class ASurvivor;
class ADBDPlayer;

UCLASS(Blueprintable, meta=(BlueprintSpawnableComponent))
class DEADBYDAYLIGHT_API UKillerAudioHandlerComponent : public UDBDPlayerAudioHandlerComponent
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _killerMovingShockTime;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FString _shockEvent;

	UPROPERTY(EditAnywhere)
	FGameplayTagQuery _movingShockCondition;

public:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
	void TriggerSurvivorDamageHitAudioSFX(ASurvivor* survivor, EAttackType attackType, bool causedKO, bool isWeaponHit, bool isLightHit);

	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void TriggerKillerReactionSpecificSurvivorSFX(ADBDPlayer* survivor);

private:
	UFUNCTION(BlueprintCallable)
	void OnChaseStart(ADBDPlayer* chasedSurvivor);

protected:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void HitImpactOnSurvivorSFX(ASurvivor* survivor, EAttackType attackType, bool isWeaponHit);

public:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void ChaseTriggerKillerReactionSpecificSurvivorSFX(ADBDPlayer* survivor);

public:
	UKillerAudioHandlerComponent();
};

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