text: #pragma once
  
  #include "Xuzumi/Platform/Input.h"
  #include "Xuzumi/Core/Types.h"
  
  #include <Windows.h>
  
  namespace Xuzumi
  {
  	using WindowsVirtualKey = decltype(VK_LBUTTON);
  
  	class WindowsInput final : public Input
  	{
  	public:
  		WindowsInput();
  		~WindowsInput() override = default;
  
  		auto& GetToNativeTable() { return m_toNative; }
  		auto& GetToGenericTable() { return m_toGeneric; }
  
  		bool CanConvert(KeyCode key);
  		bool CanConvert(WindowsVirtualKey nativeKey);
  		bool CanConvert(const String& keyname);
  
  		static WindowsInput& Get();
  
  	protected:
  		bool GetKey_(KeyCode key) override;
  		bool GetKey_(const String& keyname) override;
  	
  	private:
  		void FillKeyCodeTable();
  		
  		Map<KeyCode, WindowsVirtualKey> m_toNative;
  		Map<WindowsVirtualKey, KeyCode> m_toGeneric;
  		Map<String, KeyCode> m_stringToGeneric;
  	};
  }
  