using System.Drawing;
using System.Numerics;

namespace Dashboard.Events
{
    [Flags]
    public enum MouseButtons
    {
        M1 = 1 << 0,
        M2 = 1 << 1,
        M3 = 1 << 2,
        M4 = 1 << 3,
        M5 = 1 << 4,
        M6 = 1 << 5,
        M7 = 1 << 6,
        M8 = 1 << 7,

        Left = M1,
        Right = M2,
        Middle = M3,
    }

    public sealed class MouseMoveEventArgs : UiEventArgs
    {
        public Vector2 ClientPosition { get; }
        public Vector2 Delta { get; }

        public MouseMoveEventArgs(Vector2 clientPosition, Vector2 delta)
            : base(UiEventType.MouseMove)
        {
            ClientPosition = clientPosition;
            Delta = delta;
        }
    }

    public sealed class MouseButtonEventArgs : UiEventArgs
    {
        public Vector2 ClientPosition { get; }
        public MouseButtons Buttons { get; }

        public MouseButtonEventArgs(Vector2 clientPosition, MouseButtons buttons, bool up)
            : base(up ? UiEventType.MouseButtonUp : UiEventType.MouseButtonDown)
        {
            ClientPosition = clientPosition;
            Buttons = buttons;
        }
    }

    public sealed class MouseScrollEventArgs : UiEventArgs
    {
        public Vector2 ClientPosition { get; }
        public Vector2 ScrollDelta { get; }

        public MouseScrollEventArgs(Vector2 clientPosition, Vector2 scrollDelta)
            : base(UiEventType.MouseScroll)
        {
            ClientPosition = clientPosition;
            ScrollDelta = scrollDelta;
        }
    }

    public interface IMouseEvents
    {
        event EventHandler<MouseMoveEventArgs> MouseMoved;
        event EventHandler<MouseButtonEventArgs> MouseButtonDown;
        event EventHandler<MouseButtonEventArgs> MouseButtonUp;
        event EventHandler<MouseScrollEventArgs> MouseScroll;
    }
}