#ifndef USER_H
#define USER_H

struct sys_window;
struct work_startup_receipt;
struct renderer_startup_receipt;
struct font_startup_receipt;
struct sprite_startup_receipt;
struct draw_startup_receipt;
struct game_startup_receipt;
struct asset_cache_startup_receipt;
struct mixer_startup_receipt;

enum user_bind_kind {
    USER_BIND_KIND_NONE,

    USER_BIND_KIND_MOVE_UP,
    USER_BIND_KIND_MOVE_DOWN,
    USER_BIND_KIND_MOVE_LEFT,
    USER_BIND_KIND_MOVE_RIGHT,

    /* Testing */

    USER_BIND_KIND_DEBUG_CLEAR,
    USER_BIND_KIND_DEBUG_DRAW,
    USER_BIND_KIND_DEBUG_CAMERA,
    USER_BIND_KIND_FULLSCREEN,
    USER_BIND_KIND_ZOOM_IN,
    USER_BIND_KIND_ZOOM_OUT,
    USER_BIND_KIND_PAN,
    USER_BIND_KIND_CTRL_TEST,

    USER_BIND_KIND_COUNT
};

struct user_startup_receipt { i32 _; };
struct user_startup_receipt user_startup(struct work_startup_receipt *work_sr,
                                         struct renderer_startup_receipt *renderer_sr,
                                         struct font_startup_receipt *font_sr,
                                         struct sprite_startup_receipt *sprite_sr,
                                         struct draw_startup_receipt *draw_sr,
                                         struct game_startup_receipt *game_sr,
                                         struct asset_cache_startup_receipt *asset_cache_sr,
                                         struct mixer_startup_receipt *mixer_sr,
                                         struct sys_window *window);

#endif
