using System;
using UnityEngine.InputSystem;

namespace SalientVoid.Input
{
    /// <summary>
    /// Simple event container for UI-specific actions
    /// </summary>
    public class UiInputActions
    {
        public event Action<InputAction.CallbackContext> Cancel;
        public event Action<InputAction.CallbackContext> Click;
        public event Action<InputAction.CallbackContext> MiddleClick;
        public event Action<InputAction.CallbackContext> Navigate;
        public event Action<InputAction.CallbackContext> Point;
        public event Action<InputAction.CallbackContext> RightClick;
        public event Action<InputAction.CallbackContext> ScrollWheel;
        public event Action<InputAction.CallbackContext> Submit;
        public event Action<InputAction.CallbackContext> TrackedDeviceOrientation;
        public event Action<InputAction.CallbackContext> TrackedDevicePosition;

        public void Bind(InputControls.UIActions control)
        {
            control.Cancel.performed += context => Cancel?.Invoke(context);
            control.Click.performed += context => Click?.Invoke(context);
            control.MiddleClick.performed += context => MiddleClick?.Invoke(context);
            control.Navigate.performed += context => Navigate?.Invoke(context);
            control.Point.performed += context => Point?.Invoke(context);
            control.RightClick.performed += context => RightClick?.Invoke(context);
            control.ScrollWheel.performed += context => ScrollWheel?.Invoke(context);
            control.Submit.performed += context => Submit?.Invoke(context);
            control.TrackedDeviceOrientation.performed += context => TrackedDeviceOrientation?.Invoke(context);
            control.TrackedDevicePosition.performed += context => TrackedDevicePosition?.Invoke(context);
        }
    }
}