using System;

namespace Quik
{
    public enum MouseButton : byte
    {
        Primary     = 1 << 0,
        Secondary   = 1 << 1,
        Tertiary    = 1 << 2,
        Auxilliary1 = 1 << 3,
        Auxilliary2 = 1 << 4,
        Auxilliary3 = 1 << 5,
        Auxilliary4 = 1 << 6,
        Auxilliary5 = 1 << 7,
    }

    public struct MouseState
    {
        public readonly QVec2 AbsolutePosition;
        public readonly MouseButton ButtonsDown;

        public MouseState(QVec2 position, MouseButton down)
        {
            AbsolutePosition = position;
            ButtonsDown = down;
        }
    }

    public class MouseButtonEventArgs : EventArgs
    {
        public QVec2 AbsolutePosition { get; }
        public MouseButton Buttons { get; }

        public MouseButtonEventArgs(QVec2 position, MouseButton buttons)
        {
            AbsolutePosition = position;
            Buttons = buttons;
        }

        public QVec2 RelativePosition(QVec2 origin)
        {
            return AbsolutePosition - origin;
        }

        // public QVec2 RelativePosition(Controls.Control control)
        // {
        //     return AbsolutePosition - control.AbsoluteBounds.Min;
        // }
    }

    public class MouseMoveEventArgs : EventArgs
    {
        public QVec2 AbsolutePosition { get; }
        public QVec2 LastPosition { get; }
        public QVec2 Motion { get; }

        public MouseMoveEventArgs(QVec2 position, QVec2 lastPosition)
        {
            AbsolutePosition = position;
            LastPosition = lastPosition;
            Motion = position - lastPosition;
        }

        public QVec2 RelativePosition(QVec2 origin)
        {
            return AbsolutePosition - origin;
        }

        // public QVec2 RelativePosition(Controls.Control control)
        // {
        //     return AbsolutePosition - control.AbsoluteBounds.Min;
        // }
    }
}