using Syntriax.Engine.Core.Abstract;

namespace Syntriax.Engine.Systems.Input;

public interface IButtonInputs<T> : IHasStateEnable
{
    event ButtonCallbackEventHandler? OnAnyButtonPressed;
    event ButtonCallbackEventHandler? OnAnyButtonReleased;

    void RegisterOnPress(T button, ButtonCallbackEventHandler callback);
    void UnregisterOnPress(T button, ButtonCallbackEventHandler callback);
    void RegisterOnRelease(T button, ButtonCallbackEventHandler callback);
    void UnregisterOnRelease(T button, ButtonCallbackEventHandler callback);

    bool IsPressed(T button);

    delegate void ButtonCallbackEventHandler(IButtonInputs<T> buttonInputs, T button);
}