#if USING_MRTK3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.Input;

namespace SimplifyXR
{
    /// <summary>
    /// Initiates a sequence based on an interactor event trigger
    /// </summary>
    [DirectiveCategory(DirectiveCategories.Initiator, DirectiveSubCategory.Experimental, prettyName = "Gaze Pinch", directiveLibrary = DirectiveLibrary.MRTK3, directiveInfo = "This initiator starts a sequence when a <b>MRTK Gaze Pinch Interactor Event</b> is <b>detected.</b>")]
    public class MRTKGazePinchInteractorInitiator : XRBaseInteractorInitiator
    {
        [System.Serializable]
        public class InteractorPair
        {
            [Required, Tooltip("The gaze pinch interactor object"), SerializeField]
            public GazePinchInteractor gazePinchInteractor;

            [Conditional("gazePinchInteractor", null, ComparisonType.NotEqual),
                Tooltip("The interactor event to listen to"), SerializeField]
            public XRInteractorEvent gazePinchInteractorEvent;
        }

        [Required, Tooltip("The gaze pinch interactor object"),
         Conditional("listenToMultiple", false, ComparisonType.Equals)]
        public GazePinchInteractor gazePinchInteractor;

        [Conditional("gazePinchInteractor", null, ComparisonType.NotEqual),
            Conditional("listenToMultiple", true, ComparisonType.NotEqual),
            Tooltip("The interactor event to listen to")]
        public XRInteractorEvent gazePinchInteractorEvent;

        [Conditional("listenToMultiple", true, ComparisonType.Equals),
            Tooltip("The interactor event to listen to")]
        public List<InteractorPair> gazePinchInteractors;


        protected override void RegisterEvents(bool register)
        {
            if (!listenToMultiple)
            {
                RegisterEventHandler(gazePinchInteractor, gazePinchInteractorEvent, register);
            }
            else
            {
                foreach (InteractorPair interactorPair in gazePinchInteractors)
                {
                    RegisterEventHandler(interactorPair.gazePinchInteractor, interactorPair.gazePinchInteractorEvent, register);
                }
            }
        }

    }
}
#endif
