using SalientVoid.Core;

namespace SalientVoid.Input
{
    public class InputEvent : PersistentSingleton<InputEvent>
    {
        public static PlayerInputActions Player { get; private set; } = new();
        public static UiInputActions Ui { get; private set; } = new();
        
        private InputControls _inputControls; // This is the instance of the input system generated code
        
        protected override void Awake()
        {
            base.Awake();
            Initialize();
        }

        public void EnablePlayerInput()
        {
            if (_inputControls.Player.enabled) { return; }
            _inputControls.Player.Enable();
        }
        
        public void DisablePlayerInput()
        {
            if (!_inputControls.Player.enabled) { return; }
            _inputControls.Player.Disable();
        }
        
        public void EnableUiInput()
        {
            if (_inputControls.UI.enabled) { return; }
            _inputControls.UI.Enable();
        }
        
        public void DisableUiInput()
        {
            if (!_inputControls.Player.enabled) { return; }
            _inputControls.Player.Disable();
        }

        private void Initialize()
        {
            _inputControls = new InputControls();
            Player.Bind(_inputControls.Player);
            Ui.Bind(_inputControls.UI);
            _inputControls.Player.Enable();
            _inputControls.UI.Enable();
        }
    }
}