"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchiene = exports.KursblockungDynSchiene = void 0;
const JavaObject_1 = require("../../java/lang/JavaObject");
const HashMap_1 = require("../../java/util/HashMap");
const LogLevel_1 = require("../../logger/LogLevel");
class KursblockungDynSchiene extends JavaObject_1.JavaObject {
    nr;
    logger;
    kursMap;
    statistik;
    /**
     * Im Konstruktor werden die Referenzen übernommen und das HashMap erzeugt.
     *
     * @param pLogger    Logger für Benutzerhinweise, Warnungen und Fehler.
     * @param pNr        Die Nummer der Schiene.
     * @param pStatistik Das Statistik-Objekt wird über die aktuellen Kurs-Paarungen
     *                   informiert.
     */
    constructor(pLogger, pNr, pStatistik) {
        super();
        this.logger = pLogger;
        this.nr = pNr;
        this.kursMap = new HashMap_1.HashMap();
        this.statistik = pStatistik;
    }
    toString() {
        return "" + this.nr;
    }
    /**
     * Fügt der Schiene einen Kurs hinzu. Das Statistik-Objekt wird über neue
     * Kurs-Paarungen informiert.
     *
     * @param kurs1 Der Kurs, welcher der Schiene hinzugefügt werden soll.
     */
    aktionKursHinzufuegen(kurs1) {
        let kursID = kurs1.gibID();
        if (this.kursMap.containsKey(kursID)) {
            this.logger.logLn(LogLevel_1.LogLevel.ERROR, "Kurs \'" + kurs1.gibRepresentation().valueOf() + "\' soll in Schiene " + this.nr + ", ist aber bereits drin. ");
            return;
        }
        for (let kurs2 of this.kursMap.values()) {
            this.statistik.aktionKurspaarInSchieneHinzufuegen(kurs1, kurs2);
        }
        this.kursMap.put(kursID, kurs1);
    }
    /**
     * Entfernt aus der Schiene einen Kurs. Das Statistik-Objekt wird über zu
     * entfernende Kurs-Paarungen informiert.
     *
     * @param kurs1 Der Kurs, welcher aus der Schiene entfernt werden soll.
     */
    aktionKursEntfernen(kurs1) {
        let kursID = kurs1.gibID();
        if (!this.kursMap.containsKey(kursID)) {
            this.logger.logLn(LogLevel_1.LogLevel.ERROR, "Kurs \'" + kurs1.gibRepresentation().valueOf() + "\' soll aus Schiene " + this.nr + " enternt werden, ist aber nicht drin.");
            return;
        }
        this.kursMap.remove(kursID);
        for (let kurs2 of this.kursMap.values()) {
            this.statistik.aktionKurspaarInSchieneEntfernen(kurs1, kurs2);
        }
    }
    /**
     * Liefert die aktuelle Nummer der Schiene (0-indiziert).
     *
     * @return Die aktuelle Nummer der Schiene (0-indiziert).
     */
    gibNr() {
        return this.nr;
    }
    /**
     * Liefert die aktuelle Anzahl an Kursen in dieser Schiene.
     *
     * @return Die aktuelle Anzahl an Kursen in dieser Schiene.
     */
    gibKursAnzahl() {
        return this.kursMap.size();
    }
    /**
     * Debug-Ausgabe. Nur für Testzwecke.
     * @param nurMultikurse Fallse TRUE, werden nur Multikurse angezeigt.
     */
    debug(nurMultikurse) {
        for (let k of this.kursMap.values()) {
            if (nurMultikurse) {
                if (k.gibSchienenAnzahl() < 2) {
                    continue;
                }
            }
            console.log(JSON.stringify("    " + k.gibRepresentation().valueOf() + "\n"));
        }
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.kursblockung.KursblockungDynSchiene'].includes(name);
    }
}
exports.KursblockungDynSchiene = KursblockungDynSchiene;
function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchiene(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchiene = cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchiene;
//# sourceMappingURL=KursblockungDynSchiene.js.map