module core

import time

enum LogLevel {
	info
	debug
	error
}

pub struct Logger {
mut:
	logs string
}

fn log_level_str(level LogLevel) string {
	return match level {
		.info { 'INFO' }
		.debug { 'DEBUG' }
		.error { 'ERROR' }
	}
}

pub fn (mut l Logger) log(mod string, level LogLevel, msg string) {
	timestamp := time.now().format_ss_milli()
	full_msg := '[$timestamp] [${log_level_str(level)}] [$mod] $msg'

	println(full_msg)

	l.logs += full_msg + '\n'
}

pub fn (mut l Logger) info(mod string, msg string) {
	l.log(mod, .info, msg)
}

pub fn (mut l Logger) debug(mod string, msg string) {
	l.log(mod, .debug, msg)
}

pub fn (mut l Logger) error(mod string, msg string) {
	l.log(mod, .error, msg)
}
pub fn (l Logger) get_logs() string {
	return l.logs
}