#include <pybind11/pybind11.h>
#include <basilisk/IO/keyboard.h>

namespace py = pybind11;
using namespace bsk::internal;

void bind_key(py::module_& m) {
    // Create a submodule for key constants
    auto key_module = m.def_submodule("key", "Keyboard key constants");
    
    // Bind the KeyCode enum to the submodule
    py::enum_<KeyCode>(key_module, "KeyCode")
        .value("K_A", KeyCode::K_A)
        .value("K_B", KeyCode::K_B)
        .value("K_C", KeyCode::K_C)
        .value("K_D", KeyCode::K_D)
        .value("K_E", KeyCode::K_E)
        .value("K_F", KeyCode::K_F)
        .value("K_G", KeyCode::K_G)
        .value("K_H", KeyCode::K_H)
        .value("K_I", KeyCode::K_I)
        .value("K_J", KeyCode::K_J)
        .value("K_K", KeyCode::K_K)
        .value("K_L", KeyCode::K_L)
        .value("K_M", KeyCode::K_M)
        .value("K_N", KeyCode::K_N)
        .value("K_O", KeyCode::K_O)
        .value("K_P", KeyCode::K_P)
        .value("K_Q", KeyCode::K_Q)
        .value("K_R", KeyCode::K_R)
        .value("K_S", KeyCode::K_S)
        .value("K_T", KeyCode::K_T)
        .value("K_U", KeyCode::K_U)
        .value("K_V", KeyCode::K_V)
        .value("K_W", KeyCode::K_W)
        .value("K_X", KeyCode::K_X)
        .value("K_Y", KeyCode::K_Y)
        .value("K_Z", KeyCode::K_Z)
        .value("K_0", KeyCode::K_0)
        .value("K_1", KeyCode::K_1)
        .value("K_2", KeyCode::K_2)
        .value("K_3", KeyCode::K_3)
        .value("K_4", KeyCode::K_4)
        .value("K_5", KeyCode::K_5)
        .value("K_6", KeyCode::K_6)
        .value("K_7", KeyCode::K_7)
        .value("K_8", KeyCode::K_8)
        .value("K_9", KeyCode::K_9)
        .value("K_F1", KeyCode::K_F1)
        .value("K_F2", KeyCode::K_F2)
        .value("K_F3", KeyCode::K_F3)
        .value("K_F4", KeyCode::K_F4)
        .value("K_F5", KeyCode::K_F5)
        .value("K_F6", KeyCode::K_F6)
        .value("K_F7", KeyCode::K_F7)
        .value("K_F8", KeyCode::K_F8)
        .value("K_F9", KeyCode::K_F9)
        .value("K_F10", KeyCode::K_F10)
        .value("K_F11", KeyCode::K_F11)
        .value("K_F12", KeyCode::K_F12)
        .value("K_BACKSPACE", KeyCode::K_BACKSPACE)
        .value("K_TAB", KeyCode::K_TAB)
        .value("K_ENTER", KeyCode::K_ENTER)
        .value("K_LEFT_SHIFT", KeyCode::K_LEFT_SHIFT)
        .value("K_RIGHT_SHIFT", KeyCode::K_RIGHT_SHIFT)
        .value("K_LEFT_CONTROL", KeyCode::K_LEFT_CONTROL)
        .value("K_RIGHT_CONTROL", KeyCode::K_RIGHT_CONTROL)
        .value("K_LEFT_ALT", KeyCode::K_LEFT_ALT)
        .value("K_RIGHT_ALT", KeyCode::K_RIGHT_ALT)
        .value("K_CAPS_LOCK", KeyCode::K_CAPS_LOCK)
        .value("K_ESCAPE", KeyCode::K_ESCAPE)
        .value("K_SPACE", KeyCode::K_SPACE)
        .export_values();
}