﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class OptionsController : MonoBehaviour {

    public Slider[] volumeSliders;
    public Slider renderDistanceSlider;
    public Toggle[] muteToggles;

    public AudioManager audioManager;

    public TMP_InputField moodleUsernameInput;

    private void Awake()
    {
        GetComponent<Camera>().farClipPlane = PlayerPrefs.GetFloat("RenderDistance");
    }

    private void Start() {
        if (muteToggles.Length >= 2) {
            if (muteToggles[0]) {
                if (PlayerPrefs.GetInt("MusicMute") == 1) {
                    muteToggles[0].isOn = true;
                }
                else {
                    muteToggles[0].isOn = false;
                }
            }
            if (muteToggles[1]) {
                if (PlayerPrefs.GetInt("SoundEffectsMute") == 1) {
                    muteToggles[1].isOn = true;
                }
                else {
                    muteToggles[1].isOn = false;
                }
            }
        }

        if(volumeSliders.Length >= 2) {

            if(volumeSliders[0] != null)
                volumeSliders[0].value = audioManager.GetVolume(AudioManager.AudioChannel.Music);

            if(volumeSliders[1] != null)
                volumeSliders[1].value = audioManager.GetVolume(AudioManager.AudioChannel.SoundEffects);
        }

        if (renderDistanceSlider)
        {
            renderDistanceSlider.value = GetComponent<Camera>().farClipPlane;
        }
    }

	public void SetSoundEffectsVolume(Slider _slider) {
        if(_slider.value > 0) {
            PlayerPrefs.SetInt("SoundEffectsMute", 0); // 0 for off
            muteToggles[1].isOn = false;
        }
        audioManager.SetVolume(_slider.value, AudioManager.AudioChannel.SoundEffects);
        PlayerPrefs.SetFloat("SoundEffectsVolume", _slider.value);
    }

    public void SetMusicVolume(Slider _slider) {
        if (_slider.value > 0) {
            PlayerPrefs.SetInt("MusicMute", 0); // 0 for off
            muteToggles[0].isOn = false;
        }
        audioManager.SetVolume(_slider.value, AudioManager.AudioChannel.Music);
        PlayerPrefs.SetFloat("MusicVolume", _slider.value);
    }

    public void MuteMusic(bool toggle) {
        if (toggle) {
            audioManager.SetVolume(0, AudioManager.AudioChannel.Music);
            volumeSliders[0].value = 0;
            PlayerPrefs.SetInt("MusicMute", 1); // 1 for on
            return;
        }

        audioManager.SetVolume(PlayerPrefs.GetFloat("MusicVolume"), AudioManager.AudioChannel.Music);
        PlayerPrefs.SetInt("MusicMute", 0); // 0 for off
        volumeSliders[0].value = PlayerPrefs.GetFloat("MusicVolume");
    }

    public void MuteSoundEffects(bool toggle) {
        if (toggle) {
            audioManager.SetVolume(0, AudioManager.AudioChannel.SoundEffects);
            volumeSliders[1].value = 0;
            PlayerPrefs.SetInt("SoundEffectsMute", 1); // 1 for on
            return;
        }

        audioManager.SetVolume(PlayerPrefs.GetFloat("SoundEffectsVolume"), AudioManager.AudioChannel.SoundEffects);
        PlayerPrefs.SetInt("SoundEffectsMute", 0); // 0 for off
        volumeSliders[1].value = PlayerPrefs.GetFloat("SoundEffectsVolume");
    }

    public void UpdateFarClipPlane(Slider _slider)
    {
        GetComponent<Camera>().farClipPlane = _slider.value;
        PlayerPrefs.SetFloat("RenderDistance", _slider.value);
    }

    public void UpdateMoodleUsername() {
        string moodleUsername = moodleUsernameInput.text;
        if (moodleUsername.Length > 0) {
            PlayfabCloudScriptAPI.UpdatePlayerMoodleData(moodleUsername);
        }
    }
}
