using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadingScreen : MonoBehaviour
{
    public static LoadingScreen instance {get; private set;}

    [SerializeField]private Image loadingProgress;
    [SerializeField]private Text loadingProgressTxt;

    void Awake(){
        if(instance != null){Destroy(gameObject);return;}
        instance =this;
        canvasGroup = GetComponent<CanvasGroup>();
    }

    
    void Start()
    {
        DontDestroyOnLoad(gameObject);
    }

    public static void LoadLevel(string levelName){
        if(instance==null){Debug.LogError("No loading screen found, Raw load"); SceneManager.LoadScene(levelName); return;}

        instance.loadLevel(levelName);
    }

    public void loadLevel(string levelName){
        if (loading) { return; }
        loading = true;
        StartCoroutine(_loadlLevel(levelName));
    }

    public static bool loading {get; private set;}
    private CanvasGroup canvasGroup;
    IEnumerator _loadlLevel(string levelName)
    {
        // AudioManager.instnace.SetMusic(-1);
        loading = true;
        canvasGroup.alpha = 0;
        canvasGroup.blocksRaycasts = true;
        
        SetProgress(0);
        while (canvasGroup.alpha < 1f)
        {
            canvasGroup.alpha += 0.03f;
            yield return new WaitForFixedUpdate();
        }

        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(levelName);

        while (!asyncOperation.isDone)
        {
            SetProgress(asyncOperation.progress);
            yield return null;
        }
        Debug.Log("Loaded scene " + levelName);
        yield return new WaitForSecondsRealtime(0.2f);

        canvasGroup.blocksRaycasts = false;

        while (canvasGroup.alpha > 0)
        {
            canvasGroup.alpha -= 0.03f;
            yield return new WaitForSecondsRealtime(0.015f);

        }
        Debug.Log("Loading scene vanishing");

        loading = false;
    }

    void SetProgress(float value)
    {
        loadingProgress.fillAmount = value;
        loadingProgressTxt.text = (int)(value * 100) + "%";
    }

}
