using System.Collections.Generic;
using UnityEngine;

namespace UI
{
    public class UIManager : MonoBehaviour, IUIManager
    {
        private static UIManager _instance = null;
        public static UIManager Instance => _instance;
        private Dictionary<string, Canvas> canvases = null;

        private void Awake()
        {
            if (_instance == null)
                _instance = this;

            if (_instance != this)
                Destroy(this);
        }

        public void SwitchToCanvas(string canvasName)
        {
            Initialize();

            CloseAllCanvases();

            canvases[canvasName].gameObject.SetActive(true);
        }

        public void CloseAllCanvases()
        {
            Initialize();

            foreach (Canvas canvas in canvases.Values)
                canvas.gameObject.SetActive(false);
        }
        public void ExitGame() => Application.Quit();

        private void Initialize()
        {
            if (canvases != null)
                return;

            Transform mainCanvasTransform = transform.Find("Main Canvas");
            canvases = new Dictionary<string, Canvas>(mainCanvasTransform.childCount);

            for (int i = 0; i < mainCanvasTransform.childCount; i++)
            {
                Transform child = mainCanvasTransform.GetChild(i);
                canvases.Add(child.name, child.GetComponent<Canvas>());
            }
        }
    }
}