using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class SaveManager : MonoBehaviour {

public static SaveManager instance;
Slider masterVol, musicVol, SFXVol, CamSen;
AudioMixer masterAudio;
Toggle tutorialTog;

GameObject[] settingsArray = { };

bool sceneLoaded = false;

public GameData gamedata = new GameData
{
    masterVolData = 0f,
    musicVolData = 0f,
    SFXVolData = 0f,
    CamSenData = 0f,
    tutorialTogData = true
};

private void Awake()
{
    if(instance == null)
    {
        instance = this;
        DontDestroyOnLoad(gameObject);
    }
    else
    {
        Destroy(gameObject);
    }
}
private void OnEnable()
{
    SceneManager.sceneLoaded += OnSceneLoaded;
    SceneManager.sceneUnloaded += OnSceneUnloaded;
}
private void OnDisable()
{
    SceneManager.sceneLoaded -= OnSceneLoaded;
    SceneManager.sceneUnloaded -= OnSceneUnloaded;
}
public void SaveData()
{
    gamedata.masterVolData = masterVol.value;
    gamedata.musicVolData = musicVol.value;
    gamedata.SFXVolData = SFXVol.value;
    gamedata.CamSenData = CamSen.value;
    gamedata.tutorialTogData = tutorialTog.isOn;

    gamedata.Save(gamedata);
}

public void LoadData()
{
    GameData loadedData = gamedata.Load();

    if (loadedData == null)
    {
        return; 
    }
    else
    {
        masterVol.value = loadedData.masterVolData;
        musicVol.value = loadedData.musicVolData;
        SFXVol.value = loadedData.SFXVolData;
        CamSen.value = loadedData.CamSenData;
        tutorialTog.isOn = loadedData.tutorialTogData;
    }
}

void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    sceneLoaded = true;

    settingsArray = Resources.FindObjectsOfTypeAll<GameObject>().Where(obj => obj.tag == "SettingsUI").ToArray();

    foreach (GameObject obj in settingsArray)
    {
        switch(obj.name)
        {
            case "MasterSlider":
                masterVol = obj.GetComponent<Slider>();
                break;
            case "MusicSlider":
                musicVol = obj.GetComponent<Slider>();
                break;
            case "SFXSlider":
                SFXVol = obj.GetComponent<Slider>();
                break;
            case "SensitivitySlider":
                CamSen = obj.GetComponent<Slider>();
                break;
            case "TutTog":
                tutorialTog = obj.GetComponent<Toggle>();
                break;
            default:
                //Throw error
                break;
        }
    }
    LoadData();
}

void OnSceneUnloaded(Scene scene)
{
    sceneLoaded = false;
}

}