"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefung = exports.GostBelegpruefung = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const GostBelegpruefungsArt_1 = require("../../../core/abschluss/gost/GostBelegpruefungsArt");
const Vector_1 = require("../../../java/util/Vector");
class GostBelegpruefung extends JavaObject_1.JavaObject {
    pruefungen_vorher;
    manager;
    pruefungs_art;
    belegungsfehler = new Vector_1.Vector();
    /**
     * Erstellt eine neue Belegprüfung, welche den angegebenen Daten-Manager verwendet.
     *
     * @param manager           der Daten-Manager für die Abiturdaten
     * @param pruefungs_art     die Art der durchzuführenden Prüfung (z.B. EF.1 oder GESAMT)
     * @param pruefungen_vorher   eine vorher durchgeführte Abiturprüfung
     */
    constructor(manager, pruefungs_art, ...pruefungen_vorher) {
        super();
        this.pruefungen_vorher = pruefungen_vorher;
        this.manager = manager;
        this.pruefungs_art = pruefungs_art;
    }
    /**
     * Führt eine Belegprüfung durch.
     */
    pruefe() {
        this.init();
        if (this.pruefungs_art === GostBelegpruefungsArt_1.GostBelegpruefungsArt.EF1)
            this.pruefeEF1();
        else if (this.pruefungs_art === GostBelegpruefungsArt_1.GostBelegpruefungsArt.GESAMT)
            this.pruefeGesamt();
    }
    /**
     * Fügt einen Belegungsfehler zu der Belegprüfung hinzu. Diese Methode wird von den Sub-Klassen
     * aufgerufen, wenn dort ein Belegungsfehler erkannt wird.
     *
     * @param fehler   der hinzuzufügende Belegungsfehler
     */
    addFehler(fehler) {
        if (!this.belegungsfehler.contains(fehler))
            this.belegungsfehler.add(fehler);
    }
    /**
     * Gibt die Belegungsfehler zurück, welche bei der Gesamtprüfung aufgetreten sind.
     *
     * @return die Belegungsfehler
     */
    getBelegungsfehler() {
        return this.belegungsfehler;
    }
    /**
     * Git zurück, ob ein "echter" Belegungsfehler vorliegt und nicht nur eine Warnung oder ein Hinweis.
     *
     * @return true, falls ein "echter" Belegungsfehler vorliegt.
     */
    hatBelegungsfehler() {
        for (let i = 0; i < this.belegungsfehler.size(); i++) {
            let fehler = this.belegungsfehler.get(i);
            if (!fehler.istInfo())
                return false;
        }
        return true;
    }
    /**
     * Gibt zurück, ob die angegebenen Belegprüfungsfehler einen "echten" Fehler beinhalten
     * und nicht nur einen Hinweise / eine Information.
     *
     * @param alle_fehler   die Belegprüfungsfehler und -informationen der durchgeführten Belegprüfungen
     *
     * @return true, falls kein "echter" Belegprüfungsfehler aufgetreten ist, sonst false
     */
    static istErfolgreich(alle_fehler) {
        for (let i = 0; i < alle_fehler.size(); i++) {
            let fehler = alle_fehler.get(i);
            if (!fehler.istInfo())
                return false;
        }
        return true;
    }
    /**
     * Liefert alle Belegprüfungsfehler der übergebenen Teil-Belegprüfungen zurück.
     * Doppelte Fehler werden dabei nur einfach zurückgegeben (Set).
     *
     * @param pruefungen   die durchgeführten Belegprüfungen, deren fehler zurückgegeben werden sollen.
     *
     * @return die Menge der Belegprüfungsfehler
     */
    static getBelegungsfehlerAlle(pruefungen) {
        let fehler = new Vector_1.Vector();
        for (let i = 0; i < pruefungen.size(); i++) {
            let pruefung = pruefungen.get(i);
            fehler.addAll(pruefung.getBelegungsfehler());
        }
        return fehler;
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name);
    }
}
exports.GostBelegpruefung = GostBelegpruefung;
function cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefung(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefung = cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefung;
//# sourceMappingURL=GostBelegpruefung.js.map