#pragma once

// Key code values for Windows
enum class KeyCode
{
    None = 0x00, // No key was pressed
    LButton = 0x01, // Left mouse button
    RButton = 0x02, // Right mouse button
    Cancel = 0x03, // Cancel key
    MButton = 0x04, // Middle mouse button
    XButton1 = 0x05, // X1 mouse button
    XButton2 = 0x06, // X2 mouse button
    // 0x07 is undefined
    Back = 0x08,
    Tab = 0x09,
    // 0x0A-0B are reserved
    Clear = 0x0c, // The CLEAR key
    Enter = 0x0d, // The Enter key
    // 0x0E-0F are undefined
    ShiftKey = 0x10, // The Shift key
    ControlKey = 0x11, // The Ctrl key
    AltKey = 0x12, // The Alt key
    Pause = 0x13, // The Pause key
    Capital = 0x14, // The Caps Lock key
    CapsLock = 0x14, // The Caps Lock key
    KanaMode = 0x15, // IMI Kana mode
    HanguelMode = 0x15, // IMI Hanguel mode (Use HangulMode)
    HangulMode = 0x15, // IMI Hangul mode
    // 0x16 is undefined
    JunjaMode = 0x17, // IMI Janja mode
    FinalMode = 0x18, // IMI Final mode
    HanjaMode = 0x19, // IMI Hanja mode
    KanjiMode = 0x19, // IMI Kanji mode
    // 0x1A is undefined
    Escape = 0x1b, // The ESC key
    IMEConvert = 0x1c, // IMI convert key
    IMINoConvert = 0x1d, // IMI noconvert key
    IMEAccept = 0x1e, // IMI accept key
    IMIModeChange = 0x1f, // IMI mode change key
    Space = 0x20, // The Space key
    Prior = 0x21, // The Page Up key
    PageUp = 0x21, // The Page Up key
    Next = 0x22, // The Page Down key
    PageDown = 0x22, // The Page Down key
    End = 0x23, // The End key
    Home = 0x24, // The Home key
    Left = 0x25, // The Left arrow key
    Up = 0x26, // The Up arrow key
    Right = 0x27, // The Right arrow key
    Down = 0x28, // The Down arrow key
    Select = 0x29, // The Select key
    Print = 0x2a, // The Print key
    Execute = 0x2b, // The Execute key
    PrintScreen = 0x2c, // The Print Screen key
    Snapshot = 0x2c, // The Print Screen key
    Insert = 0x2d, // The Insert key
    Delete = 0x2e, // The Delete key
    Help = 0x2f, // The Help key
    D0 = 0x30, // 0
    D1 = 0x31, // 1
    D2 = 0x32, // 2
    D3 = 0x33, // 3
    D4 = 0x34, // 4
    D5 = 0x35, // 5
    D6 = 0x36, // 6
    D7 = 0x37, // 7
    D8 = 0x38, // 8
    D9 = 0x39, // 9
    // 0x3A - 40 are undefined
    A = 0x41, // A
    B = 0x42, // B
    C = 0x43, // C
    D = 0x44, // D
    E = 0x45, // E
    F = 0x46, // F
    G = 0x47, // G
    H = 0x48, // H
    I = 0x49, // I
    J = 0x4a, // J
    K = 0x4b, // K
    L = 0x4c, // L
    M = 0x4d, // M
    N = 0x4e, // N
    O = 0x4f, // O
    P = 0x50, // P
    Q = 0x51, // Q
    R = 0x52, // R
    S = 0x53, // S
    T = 0x54, // T
    U = 0x55, // U
    V = 0x56, // V
    W = 0x57, // W
    X = 0x58, // X
    Y = 0x59, // Y
    Z = 0x5a, // Z
    LWin = 0x5b, // Left Windows key
    RWin = 0x5c, // Right Windows key
    Apps = 0x5d, // Apps key
    // 0x5E is reserved
    Sleep = 0x5f, // The Sleep key
    NumPad0 = 0x60, // The Numeric keypad 0 key
    NumPad1 = 0x61, // The Numeric keypad 1 key
    NumPad2 = 0x62, // The Numeric keypad 2 key
    NumPad3 = 0x63, // The Numeric keypad 3 key
    NumPad4 = 0x64, // The Numeric keypad 4 key
    NumPad5 = 0x65, // The Numeric keypad 5 key
    NumPad6 = 0x66, // The Numeric keypad 6 key
    NumPad7 = 0x67, // The Numeric keypad 7 key
    NumPad8 = 0x68, // The Numeric keypad 8 key
    NumPad9 = 0x69, // The Numeric keypad 9 key
    Multiply = 0x6a, // The Multiply key
    Add = 0x6b, // The Add key
    Separator = 0x6c, // The Separator key
    Subtract = 0x6d, // The Subtract key
    Decimal = 0x6e, // The Decimal key
    Divide = 0x6f, // The Divide key
    F1 = 0x70, // The F1 key
    F2 = 0x71, // The F2 key
    F3 = 0x72, // The F3 key
    F4 = 0x73, // The F4 key
    F5 = 0x74, // The F5 key
    F6 = 0x75, // The F6 key
    F7 = 0x76, // The F7 key
    F8 = 0x77, // The F8 key
    F9 = 0x78, // The F9 key
    F10 = 0x79, // The F10 key
    F11 = 0x7a, // The F11 key
    F12 = 0x7b, // The F12 key
    F13 = 0x7c, // The F13 key
    F14 = 0x7d, // The F14 key
    F15 = 0x7e, // The F15 key
    F16 = 0x7f, // The F16 key
    F17 = 0x80, // The F17 key
    F18 = 0x81, // The F18 key
    F19 = 0x82, // The F19 key
    F20 = 0x83, // The F20 key
    F21 = 0x84, // The F21 key
    F22 = 0x85, // The F22 key
    F23 = 0x86, // The F23 key
    F24 = 0x87, // The F24 key
    // 0x88 - 0x8f are unassigned
    NumLock = 0x90, // The Num Lock key
    Scroll = 0x91, // The Scroll Lock key
    // 0x92 - 96 are OEM specific
    // 0x97 - 9f are unassigned
    LShiftKey = 0xa0, // The Left Shift key
    RShiftKey = 0xa1, // The Right Shift key
    LControlKey = 0xa2, // The Left Control key
    RControlKey = 0xa3, // The Right Control key
    LMenu = 0xa4, // The Left Alt key
    RMenu = 0xa5, // The Right Alt key
    BrowserBack = 0xa6, // The Browser Back key
    BrowserForward = 0xa7, // The Browser Forward key
    BrowserRefresh = 0xa8, // The Browser Refresh key
    BrowserStop = 0xa9, // The Browser Stop key
    BrowserSearch = 0xaa, // The Browser Search key
    BrowserFavorites = 0xab, // The Browser Favorites key
    BrowserHome = 0xac, // The Browser Home key
    VolumeMute = 0xad, // The Volume Mute key
    VolumeDown = 0xae, // The Volume Down key
    VolumeUp = 0xaf, // The Volume Up key
    MediaNextTrack = 0xb0, // The Next Track key
    MediaPreviousTrack = 0xb1, // The Previous Track key
    MediaStop = 0xb2, // The Stop Media key
    MediaPlayPause = 0xb3, // The Play/Pause Media key
    LaunchMail = 0xb4, // The Start Mail key
    SelectMedia = 0xb5, // The Select Media key
    LaunchApplication1 = 0xb6, // The Launch Application 1 key.
    LaunchApplication2 = 0xb7, // The Launch Application 2 key.
    // 0xB8 - B9 are reserved
    OemSemicolon = 0xba, // Used for miscellaneous characters; it can vary by keyboard.  For the US standard keyboard, the ';:' key
    Oem1 = 0xba, // Used for miscellaneous characters; it can vary by keyboard.  For the US standard keyboard, the ';:' key
    OemPlus = 0xbb, // For any country/region, the '+' key
    OemComma = 0xbc, // For any country/region, the ',' key
    OemMinus = 0xbd, // For any country/region, the '-' key
    OemPeriod = 0xbe, // For any country/region, the '.' key
    OemQuestion = 0xbf, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key
    Oem2 = 0xbf, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key
    OemTilde = 0xc0, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key
    Oem3 = 0xc0, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key
    // 0xC1 - D7 are reserved
    // 0xD8 - DA are unassigned
    OemOpenBrackets = 0xdb, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key
    Oem4 = 0xdb, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key
    OemPipe = 0xdc, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key
    Oem5 = 0xdc, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key
    OemCloseBrackets = 0xdd, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key
    Oem6 = 0xdd, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key
    OemQuotes = 0xde, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key
    Oem7 = 0xde, // Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key
    Oem8 = 0xdf, // Used for miscellaneous characters; it can vary by keyboard.
    // 0xE0 is reserved
    // 0xE1 is OEM specific
    OemBackslash = 0xe2, // Either the angle bracket key or the backslash key on the RT 102-key keyboard
    Oem102 = 0xe2, // Either the angle bracket key or the backslash key on the RT 102-key keyboard
    // 0xE3 - E4 OEM specific
    ProcessKey = 0xe5, // IME Process key
    // 0xE6 is OEM specific
    Packet = 0xe7, // Used to pass Unicode characters as if they were keystrokes. The Packet key value is the low word of a 32-bit virtual-key value used for non-keyboard input methods.
    // 0xE8 is unassigned
    // 0xE9 - F5 OEM specific
    Attn = 0xf6, // The Attn key
    CrSel = 0xf7, // The CrSel key
    ExSel = 0xf8, // The ExSel key
    EraseEof = 0xf9, // The Erase EOF key
    Play = 0xfa, // The Play key
    Zoom = 0xfb, // The Zoom key
    NoName = 0xfc, // Reserved
    Pa1 = 0xfd, // The PA1 key
    OemClear = 0xfe, // The Clear key
};
