#include "log.h"
#include "kint.h"
#include "vga.h"
#include "stdarg.h"

void kprintf(const char *format, ...)
{
	va_list args;
	va_start(args, format);

	while (*format)
	{
		if (*format == '%')
		{
			format++;
			
			switch (*format)
			{
			case 'd':
			{
				uint x = (uint) va_arg(args, uint);
				vga_putd(x);
				break;
			}
				
			case 'x':
			{
				// consider hex always unsigned
				uint x = (uint) va_arg(args, uint);
				vga_putx(x);
				break;
			}

			case 's':
			{
				char *s = va_arg(args, char *);
				vga_write(s);
				break;
			}
			}
			format++;
		}
		else
		{
			vga_put(*format);
			format++;
		}
	}

	va_end(args);
}

void kassert_int(bool condition, const char *message, const char *file, const int line)
{
	if (!condition)
	{
		vga_set_color(LIGHT_RED, BLACK);
		kprintf("ASSERTION FAILED: %s:%d\n%s\n", file, line, message);
		
		while (1)
		{}
	}
}
