#include <map>
#include <winrt/Windows.System.h>

static const std::map<int, const char*> s_key_map = {
  {static_cast<int>(winrt::Windows::System::VirtualKey::LeftButton), "LeftButton"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::RightButton), "RightButton"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Cancel), "Cancel"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::MiddleButton), "MiddleButton"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::XButton1), "XButton1"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::XButton2), "XButton2"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Back), "Back"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Tab), "Tab"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Clear), "Clear"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Enter), "Return"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Shift), "Shift"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Control), "Control"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Menu), "Menu"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Pause), "Pause"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::CapitalLock), "CapitalLock"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Kana), "Kana"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Hangul), "Hangul"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Junja), "Junja"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Final), "Final"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Hanja), "Hanja"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Kanji), "Kanji"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Escape), "Escape"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Convert), "Convert"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NonConvert), "NonConvert"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Accept), "Accept"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::ModeChange), "ModeChange"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Space), "Space"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::PageUp), "PageUp"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::PageDown), "PageDown"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::End), "End"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Home), "Home"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Left), "Left"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Up), "Up"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Right), "Right"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Down), "Down"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Select), "Select"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Print), "Print"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Execute), "Execute"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Snapshot), "Snapshot"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Insert), "Insert"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Delete), "Delete"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Help), "Help"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number0), "Number0"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number1), "Number1"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number2), "Number2"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number3), "Number3"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number4), "Number4"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number5), "Number5"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number6), "Number6"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number7), "Number7"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number8), "Number8"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Number9), "Number9"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::A), "A"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::B), "B"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::C), "C"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::D), "D"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::E), "E"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F), "F"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::G), "G"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::H), "H"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::I), "I"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::J), "J"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::K), "K"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::L), "L"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::M), "M"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::N), "N"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::O), "O"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::P), "P"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Q), "Q"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::R), "R"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::S), "S"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::T), "T"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::U), "U"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::V), "V"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::W), "W"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::X), "X"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Y), "Y"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Z), "Z"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::LeftWindows), "LeftWindows"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::RightWindows), "RightWindows"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Application), "Application"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Sleep), "Sleep"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad0), "Keypad+0"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad1), "Keypad+1"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad2), "Keypad+2"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad3), "Keypad+3"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad4), "Keypad+4"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad5), "Keypad+5"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad6), "Keypad+6"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad7), "Keypad+7"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad8), "Keypad+8"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberPad9), "Keypad+9"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Multiply), "Multiply"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Add), "Add"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Separator), "Separator"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Subtract), "Subtract"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Decimal), "Decimal"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Divide), "Divide"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F1), "F1"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F2), "F2"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F3), "F3"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F4), "F4"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F5), "F5"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F6), "F6"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F7), "F7"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F8), "F8"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F9), "F9"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F10), "F10"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F11), "F11"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F12), "F12"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F13), "F13"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F14), "F14"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F15), "F15"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F16), "F16"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F17), "F17"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F18), "F18"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F19), "F19"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F20), "F20"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F21), "F21"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F22), "F22"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F23), "F23"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::F24), "F24"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationView), "NavigationView"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationMenu), "NavigationMenu"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationUp), "NavigationUp"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationDown), "NavigationDown"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationLeft), "NavigationLeft"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationRight), "NavigationRight"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationAccept), "NavigationAccept"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NavigationCancel), "NavigationCancel"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::NumberKeyLock), "NumberKeyLock"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Scroll), "Scroll"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::LeftShift), "LeftShift"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::RightShift), "RightShift"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::LeftControl), "LeftControl"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::RightControl), "RightControl"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::LeftMenu), "LeftMenu"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::RightMenu), "RightMenu"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::GoBack), "GoBack"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::GoForward), "GoForward"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Refresh), "Refresh"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Stop), "Stop"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Search), "Search"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::Favorites), "Favorites"},
  {static_cast<int>(winrt::Windows::System::VirtualKey::GoHome), "GoHome"}};
