"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
 *
 */
const util = require("util");
const stack_trace_1 = require("stack-trace");
/**
 *
 */
class Logger {
    /**
     *
     * @param message
     * @return {any[]}
     */
    static stringify(...message) {
        const messages = [];
        if (message) {
            message.forEach(m => {
                if (m instanceof Object) {
                    try {
                        messages.push(JSON.stringify(m));
                    }
                    catch (e) {
                        messages.push(util.inspect(m, { colors: true }));
                    }
                }
                else {
                    messages.push(m);
                }
            });
        }
        return messages;
    }
    /**
     *
     * @param message
     */
    static fatal(...message) {
        const trace = stack_trace_1.get();
        console.error(new Date(), '[FATAL]', `${trace[1].getFileName()}@${trace[1].getFunctionName()}:${trace[1].getLineNumber()}`);
        console.error(new Date(), '[FATAL]', Logger.stringify(message).join(' '));
        console.trace(new Date(), '[FATAL]', Logger.stringify(message).join(' '));
        process.exit(1);
    }
    /**
     *
     * @param message
     */
    static error(...message) {
        console.error(new Date(), '[ERROR]', message.join(' '));
    }
    /**
     *
     * @param message
     */
    static warning(...message) {
        console.warn(new Date(), '[WARNING]', message.join(' '));
    }
    /**
     *
     * @param message
     */
    static info(...message) {
        console.log(new Date(), '[INFO]', message.join(' '));
    }
    /**
     *
     * @param message
     */
    static success(...message) {
        console.log(new Date(), '[SUCCESS]', message.join(' '));
    }
    /**
     *
     * @param message
     */
    static secondary(...message) {
        console.log(new Date(), message.join(' '));
    }
    /**
     *
     * @param message
     */
    static primary(...message) {
        console.log(new Date(), message.join(' '));
    }
    /**
     *
     * @param message
     */
    static debug(...message) {
        const trace = stack_trace_1.get();
        console.log(new Date(), '[DEBUG]', `${trace[1].getFileName()}@${trace[1].getFunctionName()}:${trace[1].getLineNumber()}`);
        console.log(new Date(), '       ', Logger.stringify(message).join(' '));
    }
}
exports.Logger = Logger;
//# sourceMappingURL=logger.js.map