/****************************************************************************
* Copyright 2019 Nreal Techonology Limited. All rights reserved.
*                                                                                                                                                          
* This file is part of NRSDK.                                                                                                          
*                                                                                                                                                           
* https://www.nreal.ai/        
* 
*****************************************************************************/

using UnityEngine;
using UnityEngine.SceneManagement;

namespace NRKernal.NRExamples
{
    /// <summary> Panel for editing the hidden debug. </summary>
    public class HiddenDebugPanel : MonoBehaviour
    {
        /// <summary> The buttons root. </summary>
        public Transform m_ButtonsRoot;
        /// <summary> The buttons. </summary>
        private UserDefineButton[] Buttons;

        /// <summary> Starts this object. </summary>
        void Start()
        {
            Buttons = gameObject.GetComponentsInChildren<UserDefineButton>(true);
            m_ButtonsRoot.gameObject.SetActive(false);

            foreach (var item in Buttons)
            {
                item.OnClick += OnItemTriggerEvent;
            }
        }

        /// <summary> Executes the 'item trigger event' action. </summary>
        /// <param name="key"> The key.</param>
        private void OnItemTriggerEvent(string key)
        {
            if (key.Equals("InvisibleBtn"))
            {
                m_ButtonsRoot.gameObject.SetActive(!m_ButtonsRoot.gameObject.activeInHierarchy);
            }
            else if (CanSceneLoaded(key))
            {
                SceneManager.LoadScene(key);
            }
        }

        /// <summary> Determine if we can scene loaded. </summary>
        /// <param name="name"> The name.</param>
        /// <returns> True if we can scene loaded, false if not. </returns>
        private bool CanSceneLoaded(string name)
        {
            return (SceneUtility.GetBuildIndexByScenePath(name) != -1) &&
                !SceneManager.GetActiveScene().name.Equals(name);
        }
    }
}