/* main.c
 * Copyright 2023 Anon Anonson, Ognjen 'xolatile' Milan Robovic, Emil Williams
 * SPDX Identifier: GPL-3.0-only / NO WARRANTY / NO GUARANTEE */

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "terminal_hl.h"

#define ALLOCATION_CHUNK (10UL)

static char * buffer      = NULL;
static size_t buffer_size = 0;

int main(int      argc,
         char * * argv) {
	UNUSED(argc);
	UNUSED(argv);

	// Buffer init
	buffer = realloc(buffer, ALLOCATION_CHUNK);

	do {
		if (!((buffer_size + 1) % ALLOCATION_CHUNK)) {
			/* Linear incremental reallocation (advanced)!
			 */
			size_t chunks = (buffer_size + 1) / ALLOCATION_CHUNK;
			buffer = realloc(buffer, ++chunks * ALLOCATION_CHUNK);
		}
		buffer[buffer_size] = '\0';
		/* TODO handle me */
		assert(read(STDIN_FILENO, &buffer[buffer_size], sizeof (*buffer)) != -1);
		++buffer_size;
	} while (buffer[buffer_size - 1]);

	buffer[buffer_size - 1] = '\0';

	// Highlight init
	terminal_hl_init();
	//
	#include "c.h"
	//
	render_string(buffer, "cterm");
	putchar('\n');
	fflush(stdout);
	//hl_deinit();
	free(buffer);

	return 0;
}