#include "Core/Util/Logging.h"

#ifdef DEBUG
_LOG_LEVEL LOG_LEVEL = LOG_LEVEL_DEBUG;
#else
_LOG_LEVEL LOG_LEVEL = LOG_LEVEL_INFO;
#endif

const char* _LOG_LEVEL_PREFIX[] =
{
    "EE: ",
	"",
	"WW: ",
	"DD: "
};

void _LOG(_LOG_LEVEL logLevel, const char* file, const char* func, unsigned int line, const char* format, ...)
{
	if (logLevel > LOG_LEVEL) {
		return;
	}

	char* message = nullptr;
	va_list args;

	va_start(args, format);
	size_t size = vsnprintf(message, 0, format, args) + 1;
	va_end(args);

	va_start(args, format);
	message = new char[size];
	vsnprintf(message, size, format, args);
	va_end(args);

	if (logLevel == LOG_LEVEL_ERROR) {
		std::cerr << file << ":" << line << " " << func << std::endl;
		std::cerr << _LOG_LEVEL_PREFIX[logLevel] << message << std::endl;
	} else {
		std::cout << _LOG_LEVEL_PREFIX[logLevel] << message << std::endl;
	}

	delete[] message;
}