"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_logger_LogData = exports.LogData = void 0;
const JavaObject_1 = require("../java/lang/JavaObject");
const Arrays_1 = require("../java/util/Arrays");
const System_1 = require("../java/lang/System");
class LogData extends JavaObject_1.JavaObject {
    time;
    level;
    text;
    newLine;
    indent = 0;
    /**
     * Erzeugt eine neue Log-Information.
     *
     * @param level     das zugehörige Log-Level
     * @param indent    die Anzahl der Leerzeichen, die bei der Ausgabe zur Einrückung genutzt werden sollen
     * @param newLine   gibt an, ob die Log-Informationen beim Ausgeben mit einer neuen Zeile beendet werden sollen oder nicht
     * @param text      der Text der Log-Information
     */
    constructor(level, indent, newLine, text) {
        super();
        this.time = System_1.System.currentTimeMillis();
        this.level = level;
        this.indent = (indent < 0) ? 0 : indent;
        this.newLine = newLine;
        this.text = (text === null) ? "" : text;
    }
    /**
     * Vergleicht zwei Log-Informationen anhand der Zeit.
     *
     * @param other   die zu vergleichenden Log-Informationen
     *
     * @return ein negativer Wert, falls diese Log-Information früher geloggt wurde, 0, falls
     *         sie zur gleichen Zeit geloggt wurden oder ein positiver Wert, falls diese
     *         Log-Information später geloggt wurde
     */
    compareTo(other) {
        if (this.time < other.time)
            return -1;
        if (this.time > other.time)
            return 1;
        return 0;
    }
    /**
     * Gibt diese Log-Information als JSON-String mit Zeit und Log-Level zurück.
     *
     * @return die Log-Informationen als JSON-String
     */
    toString() {
        return "{ \"time\":" + this.time + ", \"level\":" + this.level.toInteger() + ", \"text\":\"" + this.getText().valueOf() + "\"}";
    }
    /**
     * Erhögt die Einrückung bei der Ausgabe, um den angebenen Wert.
     *
     * @param indent   der Wert, um den die Einrückung erhöht wird.
     */
    addIndent(indent) {
        this.indent += indent;
    }
    /**
     * Gibt den Zeitstempel der Log-Information zurück.
     *
     * @return der Zeitstempel der Log-Information
     */
    getTime() {
        return this.time;
    }
    /**
     * Gibt das Log-Level der Log-Information zurück.
     *
     * @return das Log-Level der Log-Information
     */
    getLevel() {
        return this.level;
    }
    /**
     * Gibt an, ob bei der Ausgabe mit einer neue Zeile beendet werden soll oder nicht.
     *
     * @return true, falls die Ausgabe mit einer neuen Zeile beendet werden soll, ansonsten false
     */
    isNewLine() {
        return this.newLine;
    }
    /**
     * Gibt den Text dieser Log-Information mit Einrückung, aber ohne Zeitangabe und
     * Log-Level als String zurück.
     *
     * @return der Text dieser Log-Information
     */
    getText() {
        if (this.indent <= 0)
            return this.text;
        let indentChars = Array(this.indent).fill("");
        Arrays_1.Arrays.fill(indentChars, ' ');
        return indentChars.join("") + this.text.valueOf();
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.logger.LogData', 'java.lang.Comparable'].includes(name);
    }
}
exports.LogData = LogData;
function cast_de_nrw_schule_svws_logger_LogData(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_logger_LogData = cast_de_nrw_schule_svws_logger_LogData;
//# sourceMappingURL=LogData.js.map