// © 2025 Naked People Team. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameUserSettings.h"
#include "NakedDesireUserSettings.generated.h"

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSettingsChanged, class UNakedDesireUserSettings*, Settings);

UCLASS()
class NAKEDDESIRE_API UNakedDesireUserSettings : public UGameUserSettings
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	static UNakedDesireUserSettings* GetNakedDesireUserSettings();
	
	UFUNCTION(BlueprintCallable)
	void SetGlobalVolume(float Value);

	UFUNCTION(BlueprintPure)
	float GetGlobalVolume() const;

	UFUNCTION(BlueprintCallable)
	void SetMusicVolume(float Value);

	UFUNCTION(BlueprintPure)
	float GetMusicVolume() const;

	UFUNCTION(BlueprintCallable)
	void SetSfxVolume(float Value);

	UFUNCTION(BlueprintPure)
	float GetSfxVolume() const;

	UFUNCTION(BlueprintCallable)
	void SetIsCensorshipEnabled(bool Value);

	UFUNCTION(BlueprintPure)
	bool GetIsCensorshipEnabled() const;

	UFUNCTION(BlueprintPure)
	bool GetHasAcceptedDisclaimer() const;

	UFUNCTION(BlueprintCallable)
	void SetHasAcceptedDisclaimer(bool Value);
	
	virtual void SaveSettings() override;
	virtual void ApplyNonResolutionSettings() override;
	virtual void ApplySettings(bool bCheckForCommandLineOverrides) override;

	UPROPERTY(BlueprintAssignable)
	FOnSettingsChanged OnSettingsChanged;
	
protected:
	UPROPERTY(Config)
	float GlobalVolume = 0.5f;

	UPROPERTY(Config)
	float MusicVolume = 0.5f;

	UPROPERTY(Config)
	float SfxVolume = 0.5f;

	UPROPERTY(Config)
	bool IsCensorshipEnabled = false;

	UPROPERTY(Config)
	bool HasAcceptedDisclaimer = false;
};
