#include <cstdint>
#include <unordered_map>
#include <string_view>
static const std::unordered_map<uint32_t, std::string_view> g_keysIdToName {
// letters
{ 65, "A" }, { 66, "B" }, { 67, "C" }, { 68, "D" },
{ 69, "E" }, { 70, "F" }, { 71, "G" }, { 72, "H" },
{ 73, "I" }, { 74, "J" }, { 75, "K" }, { 76, "L" },
{ 77, "M" }, { 78, "N" }, { 79, "O" }, { 80, "P" },
{ 81, "Q" }, { 82, "R" }, { 83, "S" }, { 84, "T" },
{ 85, "U" }, { 86, "V" }, { 87, "W" }, { 88, "X" },
{ 89, "Y" }, { 90, "Z" },
// numbers
{ 48, "0" }, { 49, "1" }, { 50, "2" }, { 51, "3" },
{ 52, "4" }, { 53, "5" }, { 54, "6" }, { 55, "7" },
{ 56, "8" }, { 57, "9" },
// f-keys
{ 112, "F1" }, { 113, "F2" }, { 114, "F3" }, { 115, "F4" },
{ 116, "F5" }, { 117, "F6" }, { 118, "F7" }, { 119, "F8" },
{ 120, "F9" }, { 121, "F10" }, { 122, "F11" }, { 123, "F12" },
// numpad
{ 96, "NUM0" }, { 97, "NUM1" }, { 98, "NUM2" }, { 99, "NUM3" },
{ 100, "NUM4" }, { 101, "NUM5" }, { 102, "NUM6" }, { 103, "NUM7" },
{ 104, "NUM8" }, { 105, "NUM9" },
// math opers
{ 106, "*" }, { 107, "+" }, { 108, "|" }, { 109, "-" }, { 110, "." },
{ 111, "/" },
// other
{ 19, "PAUSE" }, { 35, "END" }, { 36, "HOME" }, { 45, "INSERT" },
{ 46, "DELETE" },
{ 160, "LSHIFT" }, { 161, "RSHIFT" }, { 162, "LCTRL" }, { 163, "RCTRL" },
{ 164, "LALT" }, { 165, "RALT" }
};
static const std::unordered_map<std::string_view, uint32_t> g_keysNameToId {
// letters
{ "A", 65 }, { "B", 66 }, { "C", 67 }, { "D", 68 },
{ "E", 69 }, { "F", 70 }, { "G", 71 }, { "H", 72 },
{ "I", 73 }, { "J", 74 }, { "K", 75 }, { "L", 76 },
{ "M", 77 }, { "N", 78 }, { "O", 79 }, { "P", 80 },
{ "Q", 81 }, { "R", 82 }, { "S", 83 }, { "T", 84 },
{ "U", 85 }, { "V", 86 }, { "W", 87 }, { "X", 88 },
{ "Y", 89 }, { "Z", 90 },
// numbers
{ "0", 48 }, { "1", 49 }, { "2", 50 }, { "3", 51 },
{ "4", 52 }, { "5", 53 }, { "6", 54 }, { "7", 55 },
{ "8", 56 }, { "9", 57 },
// f-keys
{ "F1", 112 }, { "F2", 113 }, { "F3", 114 }, { "F4", 115 },
{ "F5", 116 }, { "F6", 117 }, { "F7", 118 }, { "F8", 119 },
{ "F9", 120 }, { "F10", 121 }, { "F11", 122 }, { "F12", 123 },
// numpad
{ "NUM0", 96 }, { "NUM1", 97 }, { "NUM2", 98 }, { "NUM3", 99 },
{ "NUM4", 100 }, { "NUM5", 101 }, { "NUM6", 102 }, { "NUM7", 103 },
{ "NUM8", 104 }, { "NUM9", 105 },
// math opers
{ "*", 106 }, { "+", 107 }, { "|", 108 }, { "-", 109 }, { ".", 110 },
{ "/", 111 },
// other
{ "PAUSE", 19 }, { "END", 35 }, { "HOME", 36 }, { "INSERT", 45 },
{ "DELETE", 46 },
{ "LSHIFT", 160 }, { "RSHIFT", 161 }, { "LCTRL", 162 }, { "RCTRL", 163 },
{ "LALT", 164 }, { "RALT", 165 }
};