#if USING_MRTK3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.SpatialManipulation;
using UnityEngine.XR.Interaction.Toolkit;

namespace SimplifyXR
{

    /// <summary>
    /// Initiates a sequence based on an interactable event trigger
    /// </summary>
    [DirectiveCategory(DirectiveCategories.Initiator, DirectiveSubCategory.Experimental, prettyName = "Object Manipulated", directiveLibrary = DirectiveLibrary.MRTK3, directiveInfo = "This initiator starts a sequence when a <b>MRTK Object Manipulator Event</b> is <b>detected.</b>")]

    public class MRTKObjectManipulatorInitiator : XRBaseInteractableInitiator
    {

        [System.Serializable]
        public class InteractablePair
        {
            [Required, Tooltip("The interactable object"), SerializeField]
            public XRBaseInteractable interactable;

            [Conditional("interactable", null, ComparisonType.NotEqual),
                Tooltip("The interactable event to listen to"), SerializeField]
            public XRInteractableEvent interactableEvent;
        }

        [Required, Tooltip("The interactable object"),
            Conditional("listenToMultiple", false, ComparisonType.Equals)]
        public XRBaseInteractable interactable;

        [Conditional("interactable", null, ComparisonType.NotEqual),
            Conditional("listenToMultiple", true, ComparisonType.NotEqual),
            Tooltip("The interactable event to listen to")]
        public XRInteractableEvent interactableEvent;

        [Conditional("listenToMultiple", true, ComparisonType.Equals),
            Tooltip("The interactable event to listen to")]
        public List<InteractablePair> interactables;

      
        public override List<KnobKeywords> ReceiveKeywords()
        {
            return new List<KnobKeywords>();
        }

        public override List<KnobKeywords> SendKeywords()
        {
            return new List<KnobKeywords>() { new KnobKeywords("BaseInteractionEvent", typeof(BaseInteractionEventArgs)) };
        }

        protected override void RegisterEvents(bool register)
        {
            if (!listenToMultiple)
            {
                RegisterEventHandler(interactable, interactableEvent, register);
            }
            else
            {
                foreach (InteractablePair interactablePair in interactables)
                {
                    RegisterEventHandler(interactablePair.interactable, interactablePair.interactableEvent, register);
                }
            }
        }
    }
}
#endif

