using System;
using UnityEngine.UI;
namespace UnityEngine.XR.Content.Walkthrough
{
    /// 
    /// Trigger that, when active, waits for a UI button to be pressed
    /// 
    internal class ButtonPressTrigger : WalkthroughTrigger
    {
#pragma warning disable 649
        [SerializeField]
        [Tooltip("The UI button that when pressed, will allow this trigger to pass.")]
        Button m_ButtonToPress;
        [SerializeField]
        [Tooltip("Allow pressing of the button switch the step of the tutorial")]
        bool m_SwitchContext = true;
#pragma warning restore 649
        bool m_Triggered = false;
        void Start()
        {
            if (m_ButtonToPress == null)
                return;
            m_ButtonToPress.onClick.RemoveListener(ButtonPressHandler);
            m_ButtonToPress.onClick.AddListener(ButtonPressHandler);
        }
        public override bool ResetTrigger()
        {
            m_Triggered = false;
            if (m_ButtonToPress == null)
                return false;
            m_ButtonToPress.onClick.RemoveListener(ButtonPressHandler);
            m_ButtonToPress.onClick.AddListener(ButtonPressHandler);
            return true;
        }
        public override bool Check()
        {
            return m_Triggered;
        }
        void ButtonPressHandler()
        {
            // Attempt to switch to this step if this button is not part of the current step
            if (m_SwitchContext)
            {
                var parent = GetComponentInParent();
                var walkthrough = GetComponentInParent();
                if (parent != null && walkthrough != null)
                {
                    var steps = walkthrough.steps;
                    var stepIndex = Array.IndexOf(steps, parent);
                    if (stepIndex != walkthrough.currentStep)
                        walkthrough.SkipToStep(stepIndex);
                }
            }
            m_Triggered = true;
        }
    }
}