#ifndef ARC_CONSOLE_KEY_H_
#define ARC_CONSOLE_KEY_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "arc/std/bool.h"
#include <stdint.h>

typedef struct ARC_ConsoleKeyType ARC_ConsoleKey;

typedef enum ARC_ConsoleKey_Key {
    ARC_CONSOLE_KEY_A,
    ARC_CONSOLE_KEY_B,
    ARC_CONSOLE_KEY_C,
    ARC_CONSOLE_KEY_D,
    ARC_CONSOLE_KEY_E,
    ARC_CONSOLE_KEY_F,
    ARC_CONSOLE_KEY_G,
    ARC_CONSOLE_KEY_H,
    ARC_CONSOLE_KEY_I,
    ARC_CONSOLE_KEY_J,
    ARC_CONSOLE_KEY_K,
    ARC_CONSOLE_KEY_L,
    ARC_CONSOLE_KEY_M,
    ARC_CONSOLE_KEY_N,
    ARC_CONSOLE_KEY_O,
    ARC_CONSOLE_KEY_P,
    ARC_CONSOLE_KEY_Q,
    ARC_CONSOLE_KEY_R,
    ARC_CONSOLE_KEY_S,
    ARC_CONSOLE_KEY_T,
    ARC_CONSOLE_KEY_U,
    ARC_CONSOLE_KEY_V,
    ARC_CONSOLE_KEY_W,
    ARC_CONSOLE_KEY_X,
    ARC_CONSOLE_KEY_Y,
    ARC_CONSOLE_KEY_Z,

    ARC_CONSOLE_KEY_0,
    ARC_CONSOLE_KEY_1,
    ARC_CONSOLE_KEY_2,
    ARC_CONSOLE_KEY_3,
    ARC_CONSOLE_KEY_4,
    ARC_CONSOLE_KEY_5,
    ARC_CONSOLE_KEY_6,
    ARC_CONSOLE_KEY_7,
    ARC_CONSOLE_KEY_8,
    ARC_CONSOLE_KEY_9,

    ARC_CONSOLE_KEY_LEFT,
    ARC_CONSOLE_KEY_RIGHT,
    ARC_CONSOLE_KEY_DOWN,
    ARC_CONSOLE_KEY_UP,

    ARC_CONSOLE_KEY_FORWARD_SLASH,

    ARC_CONSOLE_KEY_BACKSPACE,

    ARC_CONSOLE_KEY_ENTER,

    ARC_CONSOLE_KEY_ESC
} ARC_ConsoleKey_Key;

void ARC_ConsoleKey_Create(ARC_ConsoleKey **consoleKey, ARC_ConsoleKey_Key *key);

void ARC_ConsoleKey_Destroy(ARC_ConsoleKey *consoleKey);

ARC_Bool ARC_ConsoleKey_Equals(ARC_ConsoleKey consoleKey, enum ARC_ConsoleKey_Key key);

ARC_Bool ARC_ConsoleKey_EqualsPointer(ARC_ConsoleKey *consoleKey, enum ARC_ConsoleKey_Key key);

ARC_ConsoleKey ARC_Keyboard_GetConsoleKey(enum ARC_ConsoleKey_Key key);

uint8_t ARC_ConsoleKey_GetCharFromKey(ARC_ConsoleKey *consoleKey);

#ifdef __cplusplus
}
#endif

#endif // !ARC_CONSOLE_KEY_H_
