#if USING_XRI

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.XR.Interaction.Toolkit;

#if USING_MRTK3
using Microsoft.MixedReality.Toolkit.Input;
#endif

namespace SimplifyXR
{
    public class XRIClickMapping : XRClickMapping
    {
        XRISimpleInteractable interactable;
        XRBaseInteractable baseInteractable;

        public override void OnPointerEnter(PointerEventData eventData)
        {
            base.OnPointerEnter(eventData);
            baseInteractable.enabled = false;
        }

        public override void OnPointerExit(PointerEventData eventData)
        {
            base.OnPointerEnter(eventData);
            baseInteractable.enabled = true;
        }

        public void OnEnable()
        {
            if(baseInteractable) baseInteractable.enabled = true;
        }

        public new void Start()
        {

            base.Start();

            baseInteractable =
               this.GetComponentInParent<Canvas>().gameObject.GetComponent<XRBaseInteractable>();

            interactable = this.GetComponent<XRISimpleInteractable>();
            interactable?.selectEntered?.AddListener(CheckForInteraction);

            baseInteractable.enabled = true;
        }

        private void CheckForInteraction(SelectEnterEventArgs args)
        {
            if (interactable.interactorsSelecting.Count == 1  & this.enabled)
            {
# if USING_MRTK3
                var type = (args.interactorObject).GetType();
                if (type.Equals(typeof(MRTKRayInteractor))) return;
#endif
                var timeDelta = Time.time - lastTouch;
                if (timeDelta >= touchDelay) OnClick();
                lastTouch = Time.time;
            }
        }

        public void OnDestroy()
        {
            interactable?.selectEntered?.RemoveAllListeners();
        }

    }

}




#endif
