#ifndef TERMINAL_H_

#include "hl.h"

// Terminal manipulation
#define TERMINAL_RESET              "\033[0m"

#define TERMINAL_COLOR_FG_BLACK     "\033[30m"
#define TERMINAL_COLOR_FG_RED       "\033[31m"
#define TERMINAL_COLOR_FG_GREEN     "\033[32m"
#define TERMINAL_COLOR_FG_YELLOW    "\033[33m"
#define TERMINAL_COLOR_FG_BLUE      "\033[34m"
#define TERMINAL_COLOR_FG_MAGENTA   "\033[35m"
#define TERMINAL_COLOR_FG_CYAN      "\033[36m"
#define TERMINAL_COLOR_FG_WHITE     "\033[37m"

#define TERMINAL_COLOR_BG_BLACK     "\033[40m"
#define TERMINAL_COLOR_BG_RED       "\033[41m"
#define TERMINAL_COLOR_BG_GREEN     "\033[42m"
#define TERMINAL_COLOR_BG_YELLOW    "\033[43m"
#define TERMINAL_COLOR_BG_BLUE      "\033[44m"
#define TERMINAL_COLOR_BG_MAGENTA   "\033[45m"
#define TERMINAL_COLOR_BG_CYAN      "\033[46m"
#define TERMINAL_COLOR_BG_WHITE     "\033[47m"

#define TERMINAL_STYLE_BOLD         "\033[1m"
#define TERMINAL_STYLE_ITALICS      "\033[3m"
#define TERMINAL_STYLE_REVERSE      "\033[7m"

typedef struct {
	const char * attribute;
	const char * foreground_color;
	const char * background_color;
} terminal_hl_t;

extern display_t * cterm;

extern void cterm_render_callback(const char * const string,
                                  const int          length,
                                  void       * const attributes);

extern int terminal_hl_init(void);

#define TERMINAL_H_
#endif