#ifndef USER_INTERFACE_H
#define USER_INTERFACE_H

#include "common.h"

#define UI_BUTTON_COUNT_FRAMES 3
#define UI_CHECK_COUNT_FRAMES 6

typedef struct button_s
{
    SDL_Texture *texture;                        // ссылка на текстуру
    SDL_Rect     frames[UI_BUTTON_COUNT_FRAMES]; // кадры
    SDL_Rect     rect;                           // область для отрисовки
    unsigned int num_frame;                      // текущий кадр
    bool         down;                           // tmp одноразовое нажание кнопки мыши
    bool         click;                          // нажата
} button_t;

typedef struct check_s
{
    SDL_Texture *texture;
    SDL_Rect     rect;
    SDL_Rect     frames[UI_CHECK_COUNT_FRAMES];
    unsigned int num_frame;
    bool         down;
    bool         click;
    bool         check;
} check_t;

extern void      UI_Cursor_Init(void);
extern void      UI_Cursor_Update(void);
extern void      UI_Cursor_Draw(SDL_Renderer *renderer);
extern button_t* UI_Button_Create(SDL_Texture *texture, const int x, const int y, const int frame_width, const int frame_height, const int width, const int height);
extern point_t   UI_Button_GetPosition(button_t *button);
extern void      UI_Button_SetPosition(button_t *button, const int x, const int y);
extern bool      UI_Button_IsClick(button_t *button);
extern void      UI_Button_Update(button_t *button);
extern void      UI_Button_Draw(SDL_Renderer *renderer, button_t *button);
extern void      UI_Button_Free(button_t *button);
extern check_t*  UI_Check_Create(SDL_Texture *texture, const int x, const int y, const int frame_width, const int frame_height, const int width, const int height, const bool checked);
extern point_t   UI_Check_GetPosition(check_t *check);
extern void      UI_Check_SetPosition(check_t *check, const int x, const int y);
extern bool      UI_Check_IsClick(check_t *check);
extern bool      UI_Check_IsCheck(check_t *check);
extern void      UI_Check_SetCheck(check_t *check, const bool checked);
extern void      UI_Check_Update(check_t *check);
extern void      UI_Check_Draw(SDL_Renderer *renderer, check_t *check);
extern void      UI_Check_Free(check_t *check);

#endif
