from enum import IntEnum

from sdl2._sdl2 import lib


class KeyCode(IntEnum):
    n0 = lib.SDLK_0
    n1 = lib.SDLK_1
    n2 = lib.SDLK_2
    n3 = lib.SDLK_3
    n4 = lib.SDLK_4
    n5 = lib.SDLK_5
    n6 = lib.SDLK_6
    n7 = lib.SDLK_7
    n8 = lib.SDLK_8
    n9 = lib.SDLK_9
    ac_back = lib.SDLK_AC_BACK
    ac_bookmarks = lib.SDLK_AC_BOOKMARKS
    ac_forward = lib.SDLK_AC_FORWARD
    ac_home = lib.SDLK_AC_HOME
    ac_refresh = lib.SDLK_AC_REFRESH
    ac_search = lib.SDLK_AC_SEARCH
    ac_stop = lib.SDLK_AC_STOP
    again = lib.SDLK_AGAIN
    alterase = lib.SDLK_ALTERASE
    ampersand = lib.SDLK_AMPERSAND
    application = lib.SDLK_APPLICATION
    asterisk = lib.SDLK_ASTERISK
    at = lib.SDLK_AT
    audiomute = lib.SDLK_AUDIOMUTE
    audionext = lib.SDLK_AUDIONEXT
    audioplay = lib.SDLK_AUDIOPLAY
    audioprev = lib.SDLK_AUDIOPREV
    audiostop = lib.SDLK_AUDIOSTOP
    backquote = lib.SDLK_BACKQUOTE
    backslash = lib.SDLK_BACKSLASH
    backspace = lib.SDLK_BACKSPACE
    brightnessdown = lib.SDLK_BRIGHTNESSDOWN
    brightnessup = lib.SDLK_BRIGHTNESSUP
    calculator = lib.SDLK_CALCULATOR
    cancel = lib.SDLK_CANCEL
    capslock = lib.SDLK_CAPSLOCK
    caret = lib.SDLK_CARET
    clear = lib.SDLK_CLEAR
    clearagain = lib.SDLK_CLEARAGAIN
    colon = lib.SDLK_COLON
    comma = lib.SDLK_COMMA
    computer = lib.SDLK_COMPUTER
    copy = lib.SDLK_COPY
    crsel = lib.SDLK_CRSEL
    currencysubunit = lib.SDLK_CURRENCYSUBUNIT
    currencyunit = lib.SDLK_CURRENCYUNIT
    cut = lib.SDLK_CUT
    decimalseparator = lib.SDLK_DECIMALSEPARATOR
    delete = lib.SDLK_DELETE
    displayswitch = lib.SDLK_DISPLAYSWITCH
    dollar = lib.SDLK_DOLLAR
    down = lib.SDLK_DOWN
    eject = lib.SDLK_EJECT
    end = lib.SDLK_END
    equals = lib.SDLK_EQUALS
    escape = lib.SDLK_ESCAPE
    exclaim = lib.SDLK_EXCLAIM
    execute = lib.SDLK_EXECUTE
    exsel = lib.SDLK_EXSEL
    f1 = lib.SDLK_F1
    f10 = lib.SDLK_F10
    f11 = lib.SDLK_F11
    f12 = lib.SDLK_F12
    f13 = lib.SDLK_F13
    f14 = lib.SDLK_F14
    f15 = lib.SDLK_F15
    f16 = lib.SDLK_F16
    f17 = lib.SDLK_F17
    f18 = lib.SDLK_F18
    f19 = lib.SDLK_F19
    f2 = lib.SDLK_F2
    f20 = lib.SDLK_F20
    f21 = lib.SDLK_F21
    f22 = lib.SDLK_F22
    f23 = lib.SDLK_F23
    f24 = lib.SDLK_F24
    f3 = lib.SDLK_F3
    f4 = lib.SDLK_F4
    f5 = lib.SDLK_F5
    f6 = lib.SDLK_F6
    f7 = lib.SDLK_F7
    f8 = lib.SDLK_F8
    f9 = lib.SDLK_F9
    find = lib.SDLK_FIND
    greater = lib.SDLK_GREATER
    hash = lib.SDLK_HASH
    help = lib.SDLK_HELP
    home = lib.SDLK_HOME
    insert = lib.SDLK_INSERT
    kbdillumdown = lib.SDLK_KBDILLUMDOWN
    kbdillumtoggle = lib.SDLK_KBDILLUMTOGGLE
    kbdillumup = lib.SDLK_KBDILLUMUP
    kp_0 = lib.SDLK_KP_0
    kp_00 = lib.SDLK_KP_00
    kp_000 = lib.SDLK_KP_000
    kp_1 = lib.SDLK_KP_1
    kp_2 = lib.SDLK_KP_2
    kp_3 = lib.SDLK_KP_3
    kp_4 = lib.SDLK_KP_4
    kp_5 = lib.SDLK_KP_5
    kp_6 = lib.SDLK_KP_6
    kp_7 = lib.SDLK_KP_7
    kp_8 = lib.SDLK_KP_8
    kp_9 = lib.SDLK_KP_9
    kp_a = lib.SDLK_KP_A
    kp_ampersand = lib.SDLK_KP_AMPERSAND
    kp_at = lib.SDLK_KP_AT
    kp_b = lib.SDLK_KP_B
    kp_backspace = lib.SDLK_KP_BACKSPACE
    kp_binary = lib.SDLK_KP_BINARY
    kp_c = lib.SDLK_KP_C
    kp_clear = lib.SDLK_KP_CLEAR
    kp_clearentry = lib.SDLK_KP_CLEARENTRY
    kp_colon = lib.SDLK_KP_COLON
    kp_comma = lib.SDLK_KP_COMMA
    kp_d = lib.SDLK_KP_D
    kp_dblampersand = lib.SDLK_KP_DBLAMPERSAND
    kp_dblverticalbar = lib.SDLK_KP_DBLVERTICALBAR
    kp_decimal = lib.SDLK_KP_DECIMAL
    kp_divide = lib.SDLK_KP_DIVIDE
    kp_e = lib.SDLK_KP_E
    kp_enter = lib.SDLK_KP_ENTER
    kp_equals = lib.SDLK_KP_EQUALS
    kp_equalsas400 = lib.SDLK_KP_EQUALSAS400
    kp_exclam = lib.SDLK_KP_EXCLAM
    kp_f = lib.SDLK_KP_F
    kp_greater = lib.SDLK_KP_GREATER
    kp_hash = lib.SDLK_KP_HASH
    kp_hexadecimal = lib.SDLK_KP_HEXADECIMAL
    kp_leftbrace = lib.SDLK_KP_LEFTBRACE
    kp_leftparen = lib.SDLK_KP_LEFTPAREN
    kp_less = lib.SDLK_KP_LESS
    kp_memadd = lib.SDLK_KP_MEMADD
    kp_memclear = lib.SDLK_KP_MEMCLEAR
    kp_memdivide = lib.SDLK_KP_MEMDIVIDE
    kp_memmultiply = lib.SDLK_KP_MEMMULTIPLY
    kp_memrecall = lib.SDLK_KP_MEMRECALL
    kp_memstore = lib.SDLK_KP_MEMSTORE
    kp_memsubtract = lib.SDLK_KP_MEMSUBTRACT
    kp_minus = lib.SDLK_KP_MINUS
    kp_multiply = lib.SDLK_KP_MULTIPLY
    kp_octal = lib.SDLK_KP_OCTAL
    kp_percent = lib.SDLK_KP_PERCENT
    kp_period = lib.SDLK_KP_PERIOD
    kp_plus = lib.SDLK_KP_PLUS
    kp_plusminus = lib.SDLK_KP_PLUSMINUS
    kp_power = lib.SDLK_KP_POWER
    kp_rightbrace = lib.SDLK_KP_RIGHTBRACE
    kp_rightparen = lib.SDLK_KP_RIGHTPAREN
    kp_space = lib.SDLK_KP_SPACE
    kp_tab = lib.SDLK_KP_TAB
    kp_verticalbar = lib.SDLK_KP_VERTICALBAR
    kp_xor = lib.SDLK_KP_XOR
    lalt = lib.SDLK_LALT
    lctrl = lib.SDLK_LCTRL
    left = lib.SDLK_LEFT
    leftbracket = lib.SDLK_LEFTBRACKET
    leftparen = lib.SDLK_LEFTPAREN
    less = lib.SDLK_LESS
    lgui = lib.SDLK_LGUI
    lshift = lib.SDLK_LSHIFT
    mail = lib.SDLK_MAIL
    mediaselect = lib.SDLK_MEDIASELECT
    menu = lib.SDLK_MENU
    minus = lib.SDLK_MINUS
    mode = lib.SDLK_MODE
    mute = lib.SDLK_MUTE
    numlockclear = lib.SDLK_NUMLOCKCLEAR
    oper = lib.SDLK_OPER
    out = lib.SDLK_OUT
    pagedown = lib.SDLK_PAGEDOWN
    pageup = lib.SDLK_PAGEUP
    paste = lib.SDLK_PASTE
    pause = lib.SDLK_PAUSE
    percent = lib.SDLK_PERCENT
    period = lib.SDLK_PERIOD
    plus = lib.SDLK_PLUS
    power = lib.SDLK_POWER
    printscreen = lib.SDLK_PRINTSCREEN
    prior = lib.SDLK_PRIOR
    question = lib.SDLK_QUESTION
    quote = lib.SDLK_QUOTE
    quotedbl = lib.SDLK_QUOTEDBL
    ralt = lib.SDLK_RALT
    rctrl = lib.SDLK_RCTRL
    return_ = lib.SDLK_RETURN
    return2 = lib.SDLK_RETURN2
    rgui = lib.SDLK_RGUI
    right = lib.SDLK_RIGHT
    rightbracket = lib.SDLK_RIGHTBRACKET
    rightparen = lib.SDLK_RIGHTPAREN
    rshift = lib.SDLK_RSHIFT
    scancode_mask = lib.SDLK_SCANCODE_MASK
    scrolllock = lib.SDLK_SCROLLLOCK
    select = lib.SDLK_SELECT
    semicolon = lib.SDLK_SEMICOLON
    separator = lib.SDLK_SEPARATOR
    slash = lib.SDLK_SLASH
    sleep = lib.SDLK_SLEEP
    space = lib.SDLK_SPACE
    stop = lib.SDLK_STOP
    sysreq = lib.SDLK_SYSREQ
    tab = lib.SDLK_TAB
    thousandsseparator = lib.SDLK_THOUSANDSSEPARATOR
    underscore = lib.SDLK_UNDERSCORE
    undo = lib.SDLK_UNDO
    unknown = lib.SDLK_UNKNOWN
    up = lib.SDLK_UP
    volumedown = lib.SDLK_VOLUMEDOWN
    volumeup = lib.SDLK_VOLUMEUP
    www = lib.SDLK_WWW
    a = lib.SDLK_a
    b = lib.SDLK_b
    c = lib.SDLK_c
    d = lib.SDLK_d
    e = lib.SDLK_e
    f = lib.SDLK_f
    g = lib.SDLK_g
    h = lib.SDLK_h
    i = lib.SDLK_i
    j = lib.SDLK_j
    k = lib.SDLK_k
    l = lib.SDLK_l
    m = lib.SDLK_m
    n = lib.SDLK_n
    o = lib.SDLK_o
    p = lib.SDLK_p
    q = lib.SDLK_q
    r = lib.SDLK_r
    s = lib.SDLK_s
    t = lib.SDLK_t
    u = lib.SDLK_u
    v = lib.SDLK_v
    w = lib.SDLK_w
    x = lib.SDLK_x
    y = lib.SDLK_y
    z = lib.SDLK_z


class KeyMod(IntEnum):
    alt = lib.KMOD_ALT
    caps = lib.KMOD_CAPS
    ctrl = lib.KMOD_CTRL
    gui = lib.KMOD_GUI
    lalt = lib.KMOD_LALT
    lctrl = lib.KMOD_LCTRL
    lgui = lib.KMOD_LGUI
    lshift = lib.KMOD_LSHIFT
    mode = lib.KMOD_MODE
    none = lib.KMOD_NONE
    num = lib.KMOD_NUM
    ralt = lib.KMOD_RALT
    rctrl = lib.KMOD_RCTRL
    reserved = lib.KMOD_RESERVED
    rgui = lib.KMOD_RGUI
    rshift = lib.KMOD_RSHIFT
    shift = lib.KMOD_SHIFT

    
