﻿using JLGames.RocketDriver.Actions.Audio;
using JLGames.RocketDriver.Actions.Loaderx;
using JLGames.RocketDriver.Actions.Utils;
using UnityEngine;
using UnityEngine.UI;

namespace JLGames.RocketDriver.Samples.AudioDemo
{
    public class AudioDemo : MonoBehaviour
    {
        [SerializeField] private Toggle m_MusicMuted;
        [SerializeField] private Slider m_MusicVoice;
        [SerializeField] private Toggle m_SoundMuted;
        [SerializeField] private Slider m_SoundVoice;
        [SerializeField] private Text m_SoundPausable;

        private void Start()
        {
            InitLoader();
            InitUserSettingsView();
        }

        private void InitLoader()
        {
            Loader.InitLoader("AudioLoaderSettings");
            Loader.InitVersion(OnVersionInited);
        }

        private void OnVersionInited(AssetBundleManifest asset, bool suc)
        {
            DebugUtil.Log("OnVersionInited:", suc);
            if (!suc) return;
            AudioManagerPool.Shared.SetLoaderAdapter(new AudioLoader());
        }

        private void InitUserSettingsView()
        {
            var settings = AudioManagerPool.Shared.UserSettings;
            m_MusicMuted.isOn = settings.IsMutedMusic;
            m_MusicVoice.value = settings.VolumeMusic;
            m_SoundMuted.isOn = settings.IsMutedSound;
            m_SoundVoice.value = settings.VolumeSound;
            m_SoundPausable.text = $"Pause={AudioManagerPool.Shared.SoundPausable}";
        }

        public void OnMusicMutedChanged(bool b)
        {
            AudioManagerPool.Shared.SetMusicMuted(b, true);
        }

        public void OnMusicVolumeChanged(float value)
        {
            AudioManagerPool.Shared.SetMusicVolume(value, true);
        }

        public void OnSoundMutedChanged(bool b)
        {
            AudioManagerPool.Shared.SetSoundMuted(b, true);
        }

        public void OnSoundVolumeChanged(float value)
        {
            AudioManagerPool.Shared.SetSoundVolume(value, true);
        }

        public void OnClickMusicPause()
        {
            AudioManagerPool.Shared.PauseMusic();
        }

        public void OnClickMusicPlay()
        {
            AudioManagerPool.Shared.GoseOnMusic();
        }

        public void OnClickMusicStop()
        {
            AudioManagerPool.Shared.StopMusic();
        }

        public void OnClickSoundPause()
        {
            DebugUtil.Log("OnClickSoundPause");
            AudioManagerPool.Shared.PauseSounds();
        }

        public void OnClickSoundPlay()
        {
            AudioManagerPool.Shared.GoseOnSounds();
        }

        public void OnClickSoundStop()
        {
            AudioManagerPool.Shared.StopSounds();
        }
    }
}