#ifndef BOXES_H
#define BOXES_H

#include <string>
#include <array>


/*

I'm not sure if I want to try to store the color information in this or not.
It might be easier to let this do boxes, and let something else do colors.

 */

class Boxes {
  struct box_style {
    const char *top_left;
    const char *top_right;
    const char *top;
    const char *side;
    const char *bottom_left;
    const char *bottom_right;
    const char *middle_left;
    const char *middle_right;
  } boxes[4] = {
      {"\xda", "\xbf", "\xc4", "\xb3", "\xc0", "\xd9", "\xc3", "\xb4"},
      {"\xc9", "\xbb", "\xcd", "\xba", "\xc8", "\xbc", "\xcc", "\xb9"},
      {"\xd6", "\xb8", "\xcd", "\xb3", "\xd4", "\xbe", "\xc6", "\xb5"},
      {"\xd6", "\xb7", "\xc4", "\xba", "\xd3", "\xbd", "\xc7", "\xb6"}};
  int style_;
  int width_;
  bool newline_;
  const char *nl = "\n\r";
  const char *reset = "\x1b[0m";

public:
  std::string boxcolor;
  std::string textcolor;

  Boxes(int width, int style = 1, bool newline = true);
  std::string top(void);
  std::string middle(void);
  std::string row(std::string &line);
  std::string bottom(void);

  static std::array<std::string, 3>
    alert(std::string message, std::string bcolor, std::string tcolor, int width, int style=1, bool newline=true);
  
};

#endif