// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "SettingsTabWidget.h"
#include "SettingsAudioWidget.generated.h"

class USettingRowWidget;

/**
 * L'onglet "Audio" : quatre volumes et le son en arriere-plan.
 *
 * Meme forme que USettingsGameplayWidget -- l'onglet ne stocke rien, chaque ligne
 * ecrit dans USurvivalUserSettings puis demande l'application immediate. La
 * difference tient au verbe appele : ApplyAudioSettings et non
 * ApplySurvivalSettings, parce que les volumes n'interessent pas le pawn et que
 * rediffuser aux widgets a chaque cran de curseur ne servirait a rien.
 *
 * Classe Abstract : on cree un WBP_SettingsAudio qui en herite, avec un
 * WBP_SettingRow par ligne, nomme exactement comme le BindWidget correspondant.
 */
UCLASS(Abstract)
class EMBERWILD_API USettingsAudioWidget : public USettingsTabWidget
{
	GENERATED_BODY()

public:
	virtual void NativeConstruct() override;

	virtual void RefreshFromSettings() override;
	virtual void ResetToDefaults() override;

protected:
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<USettingRowWidget> MasterVolumeRow;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<USettingRowWidget> MusicVolumeRow;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<USettingRowWidget> EffectsVolumeRow;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<USettingRowWidget> UiVolumeRow;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<USettingRowWidget> BackgroundSoundRow;

private:
	UFUNCTION()
	void HandleMasterVolumeChanged(int32 NewIndex);

	UFUNCTION()
	void HandleMusicVolumeChanged(int32 NewIndex);

	UFUNCTION()
	void HandleEffectsVolumeChanged(int32 NewIndex);

	UFUNCTION()
	void HandleUiVolumeChanged(int32 NewIndex);

	UFUNCTION()
	void HandleBackgroundSoundChanged(int32 NewIndex);
};
