/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */

#pragma once

#include "Base/ITickable.hpp"
#include "Input/InputDeviceKeyboard.hpp"
#include "Input/InputDeviceMouse.hpp"
#include "Input/InputDeviceController.hpp"

namespace OpenVulkano::GLFW
{
	class KeyboardGLFW final : public Input::InputDeviceKeyboard
	{
	public:
		KeyboardGLFW() = default;
		~KeyboardGLFW() override = default;

		using Input::InputDeviceKeyboard::Init;
		using Input::InputDeviceKeyboard::PreTick;
		using Input::InputDeviceKeyboard::UpdateKey;
		using Input::InputDeviceKeyboard::UpdateActiveWindow;
	};

	class MouseGLFW final : public Input::InputDeviceMouse
	{
	public:
		MouseGLFW() = default;
		~MouseGLFW() override = default;

		using Input::InputDeviceMouse::Init;
		using Input::InputDeviceMouse::ClearAxes;
		using Input::InputDeviceMouse::UpdateButtons;
		using Input::InputDeviceMouse::UpdatePosition;
		using Input::InputDeviceMouse::UpdateWheel;
		using Input::InputDeviceMouse::UpdateActiveWindow;
	};

	class ControllerGLFW final : public Input::InputDeviceController, public ITickable
	{
		bool gamepad = false;;
	public:
		ControllerGLFW() = default;
		~ControllerGLFW() override = default;

		void Init(int joystickId);

		void Tick() override;
	};
}