#ifndef MOUSE_BUTTONS_CODES_HPP
#define MOUSE_BUTTONS_CODES_HPP

#include <cstdint>
#include <ostream>

namespace OpenEngine
{
	typedef enum class MouseCode : uint16_t
	{
		// From glfw3.h
		Button0                = 0,
		Button1                = 1,
		Button2                = 2,
		Button3                = 3,
		Button4                = 4,
		Button5                = 5,
		Button6                = 6,
		Button7                = 7,

		ButtonLast             = Button7,
		ButtonLeft             = Button0,
		ButtonRight            = Button1,
		ButtonMiddle           = Button2
	} Mouse;
	
	inline std::ostream& operator<<(std::ostream& os, MouseCode mouseCode)
	{
		os << static_cast<int32_t>(mouseCode);
		return os;
	}
}

#define OE_MOUSE_BUTTON_0      ::OpenEngine::Mouse::Button0
#define OE_MOUSE_BUTTON_1      ::OpenEngine::Mouse::Button1
#define OE_MOUSE_BUTTON_2      ::OpenEngine::Mouse::Button2
#define OE_MOUSE_BUTTON_3      ::OpenEngine::Mouse::Button3
#define OE_MOUSE_BUTTON_4      ::OpenEngine::Mouse::Button4
#define OE_MOUSE_BUTTON_5      ::OpenEngine::Mouse::Button5
#define OE_MOUSE_BUTTON_6      ::OpenEngine::Mouse::Button6
#define OE_MOUSE_BUTTON_7      ::OpenEngine::Mouse::Button7
#define OE_MOUSE_BUTTON_LAST   ::OpenEngine::Mouse::ButtonLast
#define OE_MOUSE_BUTTON_LEFT   ::OpenEngine::Mouse::ButtonLeft
#define OE_MOUSE_BUTTON_RIGHT  ::OpenEngine::Mouse::ButtonRight

#endif // MOUSE_BUTTONS_CODES_HPP
