#include "hl.h"

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

void cterm_render_callback(const char * const string,
                           const int          length,
                           void       * const attributes) {
	if(!length){
		fputs(TERMINAL_STYLE_BOLD, stdout);
		putchar(*string);
		fputs(TERMINAL_RESET, stdout);
		return;
	}

	terminal_hl_t * term_hl = (terminal_hl_t*)attributes;
	fputs(term_hl->attribute, stdout);
	fputs(term_hl->foreground_color, stdout);
	for (int i = 0; i < length; i++) {
		putchar(*(string+i));
	}
	fputs(TERMINAL_RESET, stdout);
}

display_t * cterm = &(display_t) {
	.key = "cterm",
	.callback = cterm_render_callback
};


int terminal_hl_init(void){
	hl_init();
	new_display_mode(cterm);
	//
	terminal_hl_t * terminal_keyword_hl = (terminal_hl_t *)malloc(sizeof(terminal_hl_t));
		terminal_keyword_hl->attribute = TERMINAL_STYLE_BOLD;
		terminal_keyword_hl->foreground_color = TERMINAL_COLOR_FG_GREEN;;
		terminal_keyword_hl->background_color = NULL;
	keyword_hl = (hl_group_t *)malloc(sizeof(hl_group_t));
		keyword_hl->link = NULL;
		keyword_hl->attributes = (void*)terminal_keyword_hl;
	//
	terminal_hl_t * terminal_preprocessor_hl = (terminal_hl_t *)malloc(sizeof(terminal_hl_t));
		terminal_preprocessor_hl->attribute = TERMINAL_STYLE_BOLD;
		terminal_preprocessor_hl->foreground_color = TERMINAL_COLOR_FG_BLUE;
		terminal_preprocessor_hl->background_color = NULL;
	preprocessor_hl = (hl_group_t *)malloc(sizeof(hl_group_t));
		preprocessor_hl->link = NULL;
		preprocessor_hl->attributes = (void*)terminal_keyword_hl;
	//
	terminal_hl_t * terminal_symbol_hl = (terminal_hl_t *)malloc(sizeof(terminal_hl_t));
		terminal_symbol_hl->attribute = TERMINAL_STYLE_BOLD;
		terminal_symbol_hl->foreground_color = TERMINAL_COLOR_FG_YELLOW;
		terminal_symbol_hl->background_color = NULL;
	symbol_hl = (hl_group_t *)malloc(sizeof(hl_group_t));
		symbol_hl->link = NULL;
		symbol_hl->attributes = (void*)terminal_symbol_hl;

	return 0;
}