#ifndef LOW_LEVEL_GUI_H
#define LOW_LEVEL_GUI_H

#include "low_level_render.h"

class LowLevelWindow
{

public:
    int x, y, width, height;
    const char* title;
    LowLevelWindow(int x_pos, int y_pos, int w, int h, const char* t)
        : x(x_pos), y(y_pos), width(w), height(h), title(t) {}

};

class LowLevelGUI
{
private:
    LowLevelRenderer* renderer;
    bool use_rounded_corners = true;
    
public:
    const Font* current_font;
    LowLevelGUI(LowLevelRenderer* rend, const Font& font);
    LowLevelWindow* draw_new_window(int x, int y, int width, int height, const char *title);
    void draw_window(LowLevelWindow* window);
    void draw_button(LowLevelWindow* window, int x, int y, const char *label, bool pressed = false, bool rounded = true);
    void draw_checkbox(LowLevelWindow* window, int x, int y, const char *label, bool checked = false);
    void draw_radio_button(LowLevelWindow* window, int x, int y, const char *label, bool selected = false);
    void draw_slider(LowLevelWindow* window, int x, int y, int width, int height, int position, char* label = nullptr);
    void draw_calendar(LowLevelWindow* window, int x, int y, int month, int year);
    void draw_textbox(LowLevelWindow* window, int x, int y, int width, int height, const char* content, bool focused = false);
    void draw_tab(LowLevelWindow* window, int x, int y, int width, int height, const char* label, bool selected = false);
    void draw_status_bar(LowLevelWindow* window, int x, int y, int width, const char* label, const char* sublabel, int percentage, const char* value_text);
    void draw_circular_gauge(LowLevelWindow* window, int x, int y, int width, const char* label, int percentage);
    void draw_notification(LowLevelWindow* window, int x, int y, int width, const char* time, const char* message);
    void draw_large_clock(LowLevelWindow* window, int x, int y, const char* time_str);
};

#endif // LOW_LEVEL_GUI_H