/**
 * Copyright (c) 2024 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#pragma once
#include "display/frame.h"
#include "ui/menu.h"

#define DRAW_UI_TEXTBOX_WIDTH FRAME_WIDTH
#define DRAW_UI_TEXTBOX_HEIGHT 8
#define DRAW_UI_TEXTBOX_CURSOR_POS ((FRAME_HEIGHT * FRAME_WIDTH) - 4)
#define DRAW_UI_TEXTBOX_BLINKS_PER_SECOND 2

/**
 * Draws a UI box to the frame buffer.
 * 
 * @param x The x position to draw the border.
 * @param y The y position to draw the border.
 * @param width The width of the border.
 * @param height The height of the border.
 * @param color The color to draw the border.
 * @param fill Whether or not to fill the inside of the border.
 */
void drawUIBox(
  const uint16_t x,
  const uint16_t y,
  const uint16_t width,
  const uint16_t height,
  const uint8_t color,
  const bool_t fill
);

/**
 * Draws a UI menu to the frame buffer.
 * 
 * @param menu The menu to draw.
 * @param x The x position to draw the menu.
 * @param y The y position to draw the menu.
 * @param width The width of the menu.
 * @param height The height of the menu.
 * @param cursorColor The color of the cursor.
 * @param textColor The color of the text.
 */
void drawUIMenu(
  menu_t *menu,
  const uint16_t x,
  const uint16_t y,
  const uint16_t width,
  const uint16_t height,
  const uint8_t cursorColor,
  const uint8_t textColor
);

/**
 * Draws a UI menu box to the frame buffer.
 * 
 * @param menu The menu to draw.
 * @param x The x position to draw the menu.
 * @param y The y position to draw the menu.
 * @param width The width of the menu.
 * @param height The height of the menu.
 * @param cursorColor The color of the cursor.
 * @param textColor The color of the text.
 * @param boxColor The color of the box.
 */
void drawUIMenuBox(
  menu_t *menu,
  const uint16_t x,
  const uint16_t y,
  const uint16_t width,
  const uint16_t height,
  const uint8_t cursorColor,
  const uint8_t textColor,
  const uint8_t boxColor
);

/**
 * Draws the UI textbox to the frame buffer.
 */
void drawUITextbox();