#pragma once

#include "ehs/Types.h"
#include "ehs/Vec2.h"
#include "Button.h"
#include "HID.h"

#define EHS_HID_MOUSE 0x01

namespace ehs
{
	class EHS_LIB_IO Mouse : public HID
	{
	private:
		friend class Input;

		Vec2_s32 delta;

	public:
		Mouse();

		Mouse(Str_8 name, UInt_64 id);

		Mouse(Mouse&& hid) noexcept = default;

		Mouse(const Mouse& hid);

		Mouse& operator=(Mouse&& hid) noexcept = default;

		Mouse& operator=(const Mouse& hid);

		void Poll(float delta) override;

		void SetDelta(const Vec2_s32& newDelta);

		Vec2_s32 GetDelta() const;

		Mouse* Clone() const override;

		static const Button Unknown;
		static const Button LMB;
		static const Button MMB;
		static const Button RMB;
		static const Button Four;
		static const Button Five;
        static const Button ScrollUp;
        static const Button ScrollDown;
		static const Button ScrollLeft;
		static const Button ScrollRight;
        static const Button Back;
        static const Button Forward;

		static Button TranslateXCB(const UInt_32 code);
	};
}