#define FOLDHAUS_INPUT_COMMAND_PROC(name) void name(app_state* State, input_entry Event, mouse_state Mouse)
typedef FOLDHAUS_INPUT_COMMAND_PROC(input_command_proc);

// NOTE(Peter): Helper function so I don't have to remember the parameters to this define 
#define ExecFoldhausCommand(cmd) cmd(State, Event, Mouse)

enum input_command_flags
{
    Command_Began = 1 << 0,
    Command_Held = 1 << 1,
    Command_Ended = 1 << 2,
};

#define Command_Any Command_Began | Command_Held | Command_Ended

// TODO(Peter): At the moment these are all key press commands. Need a way to differentiate between
// press and hold. Probably add a second array to input_command_Registry
struct input_command
{
    key_code Key;
    key_code Mdfr;
    b32 Flags;
    input_command_proc* Proc;
};

struct input_command_registry
{
    input_command* Commands;
    s32 Size;
    s32 Used;
    
    input_command_proc* MouseWheelCommand;
};

struct command_queue_entry
{
    input_command Command;
    input_entry Event;
};

struct input_command_queue
{
    s32 Size;
    s32 Used;
    command_queue_entry* Commands;
};