import { Logger,ISettingsParam } from "tslog";

function loggerConfig(name: string): ISettingsParam<unknown> {
	return {
		type: "pretty", // pretty, json, hidden
		name: name,
		hideLogPositionForProduction: true,
		prettyLogTemplate: "{{dateIsoStr}} {{logLevelName}} {{nameWithDelimiterPrefix}} "
	
	}
}

type log = {
	core: Logger<unknown>
	db: Logger<unknown>
	web: Logger<unknown>
	S3: Logger<unknown>
	auth: Logger<unknown>
	api?: Logger<unknown>
	frontend?: Logger<unknown>
};

// FIXME: any type
let log: log = {
	core: new Logger(loggerConfig("Core")),
	db: new Logger(loggerConfig("DB")),
	web: new Logger(loggerConfig("Web")),
	S3: new Logger(loggerConfig("S3")),
	auth: new Logger(loggerConfig("Auth")),
//	helper: new Logger(loggerConfig("HELPER")),
};

log["api"] = log.web.getSubLogger({ name: "API" });
log["frontend"] = log.web.getSubLogger({ name: "Frontend" });


// log.core.silly("Hello from core");
//log.api.trace("Hello from api");
//log.frontend.trace("Hello from frontend");
// log.core.debug("Hello from core");
// log.core.info("Hello from core");
// log.core.warn("Hello from core");
// log.core.error("Hello from core");
// log.db.silly("Hello from db");
// log.db.trace("Hello from db");
// log.web.debug("Hello from db");
// log.auth.info("Hello from db");
// log.helper.warn("Hello from db");
// log.db.error("Hello from db");
// log.core.fatal(new Error("I am a pretty Error with a stacktrace."));

export default log;
