#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Engine/EngineTypes.h"
#include "AkGeometrySurfacePropertiesToMap.h"
#include "UObject/SoftObjectPtr.h"
#include "AkAcousticTextureParams.h"
#include "EAkUnrealAudioRouting.h"
#include "AkSettings.generated.h"

class UPhysicalMaterial;
class UAkAcousticTexture;
class UDataTable;
class UAkAuxBus;
class UAkRtpc;
class UAkAudioEvent;
class UAkInitBank;

UCLASS(Blueprintable)
class AKAUDIO_API UAkSettings : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	uint8 MaxSimultaneousReverbVolumes;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FFilePath WwiseProjectPath;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDirectoryPath WwiseSoundDataFolder;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDirectoryPath RootOutputPath;

	UPROPERTY()
	FDirectoryPath GeneratedSoundBanksFolder_DEPRECATED;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FDirectoryPath WwiseStagingDirectory;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bSoundBanksTransfered;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bAssetsMigrated;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bProjectMigrated;

	UPROPERTY()
	bool bAutoConnectToWAAPI_DEPRECATED;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TEnumAsByte<ECollisionChannel> DefaultOcclusionCollisionChannel;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TEnumAsByte<ECollisionChannel> DefaultFitToGeometryCollisionChannel;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TMap<TSoftObjectPtr<UPhysicalMaterial>, FAkGeometrySurfacePropertiesToMap> AkGeometryMap;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkAcousticTexture> DefaultAcousticTexture;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float DefaultTransmissionLoss;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UDataTable> GeometrySurfacePropertiesTable;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float GlobalDecayAbsorption;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkAuxBus> DefaultReverbAuxBus;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TMap<float, TSoftObjectPtr<UAkAuxBus>> EnvironmentDecayAuxBusMap;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UDataTable> ReverbAssignmentTable;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString HFDampingName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString DecayEstimateName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString TimeToFirstReflectionName;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkRtpc> HFDampingRTPC;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkRtpc> DecayEstimateRTPC;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkRtpc> TimeToFirstReflectionRTPC;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkAudioEvent> AudioInputEvent;

	UPROPERTY()
	TMap<FGuid, FAkAcousticTextureParams> AcousticTextureParamsMap_DEPRECATED;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool SplitSwitchContainerMedia;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool SplitMediaPerFolder;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool UseEventBasedPackaging;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString CommandletCommitMessage;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TMap<FString, FString> UnrealCultureToWwiseCulture;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString DefaultAssetCreationPath;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSoftObjectPtr<UAkInitBank> InitBank;

	UPROPERTY(EditAnywhere)
	EAkUnrealAudioRouting AudioRouting;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bWwiseSoundEngineEnabled;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bWwiseAudioLinkEnabled;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool bAkAudioMixerEnabled;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float DefaultScalingFactor;

	UPROPERTY()
	bool AskedToUseNewAssetManagement_DEPRECATED;

	UPROPERTY()
	bool bEnableMultiCoreRendering_DEPRECATED;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool MigratedEnableMultiCoreRendering;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	bool FixupRedirectorsDuringMigration;

	UPROPERTY()
	FDirectoryPath WwiseWindowsInstallationPath_DEPRECATED;

	UPROPERTY()
	FFilePath WwiseMacInstallationPath_DEPRECATED;

public:
	UAkSettings();
};

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