"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_SprachendatenManager = exports.SprachendatenManager = void 0;
const JavaObject_1 = require("../java/lang/JavaObject");
const JavaInteger_1 = require("../java/lang/JavaInteger");
const Sprachpruefungniveau_1 = require("../core/types/Sprachpruefungniveau");
const Vector_1 = require("../java/util/Vector");
const HashSet_1 = require("../java/util/HashSet");
class SprachendatenManager extends JavaObject_1.JavaObject {
    constructor() {
        super();
    }
    /**
     * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache existiert.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param sprache   das einstellige Kürzel der Sprache
     *
     * @return true, falls eine Belegung existiert und ansonsten false
     */
    static hatSprachbelegung(sprachendaten, sprache) {
        if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
            return false;
        }
        return SprachendatenManager.getSprachbelegung(sprachendaten, sprache) !== null;
    }
    /**
     * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I existiert.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param sprache   das einstellige Kürzel der Sprache
     *
     * @return true, falls eine Belegung existiert und ansonsten false
     */
    static hatSprachbelegungInSekI(sprachendaten, sprache) {
        if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
            return false;
        }
        let belegung = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
        if (belegung !== null && SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) > 0) {
            return SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) <= 10;
        }
        return false;
    }
    /**
     * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I mit der angegebenen Belegungsdauer existiert.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param sprache das einstellige Kürzel der Sprache
     * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
     *
     * @return true, falls eine Belegung existiert und ansonsten false
     */
    static hatSprachbelegungInSekIMitDauer(sprachendaten, sprache, mindestBelegdauer) {
        if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache)) || mindestBelegdauer === null || mindestBelegdauer <= 0) {
            return false;
        }
        let belegung = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
        if (belegung === null) {
            return false;
        }
        let belegtVonJahrgangNumerisch;
        let belegtBisJahrgangNumerisch;
        let letzterJahrgangSekI;
        if (belegung.belegungVonJahrgang !== null) {
            belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
            belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
            letzterJahrgangSekI = 10;
            if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
                letzterJahrgangSekI = 9;
            }
            if (0 < belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= 10) {
                if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
                    belegtBisJahrgangNumerisch = letzterJahrgangSekI;
                }
                return ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer);
            }
        }
        return false;
    }
    /**
     * Gibt die zu der übergebenen Sprache gehörende Sprachbelegung zurück.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param sprache   das einstellige Kürzel der Sprache
     *
     * @return die Sprachbelegung oder null, falls keine existiert
     */
    static getSprachbelegung(sprachendaten, sprache) {
        if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
            return null;
        }
        let belegungen = sprachendaten.belegungen;
        for (let belegung of belegungen) {
            if (JavaObject_1.JavaObject.equalsTranspiler(sprache, (belegung.sprache))) {
                return belegung;
            }
        }
        return null;
    }
    /**
     * Liefert die Sprachen aus der Sprachenfolge zurück, deren Beginn im angegebenen Zeitraum liegt und die angegebene Dauer besitzt.
     * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
     * Bei einem Schüler der Sek-II wird auch nur die Dauer der Belegung in der Sek-I betrachtet.
     * Sprachprüfungen werden nicht berücksichtigt.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param belegungbeginnStart Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn größer oder gleich dem angegebenen ASDJahrgang ist.
     * @param belegungbeginnEnde Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn kleiner oder gleich dem angegebenen ASDJahrgang ist.
     * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
     *
     * @return Vector mit Sprachbelegungen, die die Kriterien erfüllen. Die Liste ist nach Belegungsbeginn aufsteigend sortiert
     */
    static getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, belegungbeginnStart, belegungbeginnEnde, mindestBelegdauer) {
        let belegungen = new Vector_1.Vector();
        if (sprachendaten !== null && sprachendaten.belegungen !== null && belegungbeginnStart !== null && !JavaObject_1.JavaObject.equalsTranspiler(belegungbeginnStart, ("")) && belegungbeginnEnde !== null && !JavaObject_1.JavaObject.equalsTranspiler(belegungbeginnEnde, ("")) && mindestBelegdauer !== null && mindestBelegdauer >= 0) {
            let belegtVonJahrgangNumerisch;
            let belegtBisJahrgangNumerisch;
            let letzterJahrgangSekI;
            let gefundeneSprachen = new HashSet_1.HashSet();
            let alleBelegungen = sprachendaten.belegungen;
            for (let belegung of alleBelegungen) {
                if (belegung.belegungVonJahrgang !== null) {
                    belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
                    belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
                    letzterJahrgangSekI = 10;
                    if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
                        letzterJahrgangSekI = 9;
                    }
                    if (belegtVonJahrgangNumerisch > 0 && SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnStart) <= belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnEnde)) {
                        if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
                            belegtBisJahrgangNumerisch = letzterJahrgangSekI;
                        }
                        if ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer) {
                            if (!gefundeneSprachen.contains(belegung.sprache)) {
                                belegungen.add(belegung);
                            }
                            gefundeneSprachen.add(belegung.sprache);
                        }
                    }
                }
            }
        }
        if (belegungen.size() > 0) {
            let comparator = { compare: (a, b) => JavaInteger_1.JavaInteger.compare(SprachendatenManager.ASDJahrgangNumerisch(a.belegungVonJahrgang), SprachendatenManager.ASDJahrgangNumerisch(b.belegungVonJahrgang)) };
            belegungen.sort(comparator);
        }
        return belegungen;
    }
    /**
     * Prüft, ob die übergebene Sprache als eine fortgeführte Fremdsprache in der gymnasialen Oberstufe
     * gemäß APO-GOSt ab EF belegt werden kann. Dazu zählen alle belegten Sprachen mit mind. 2 Jahren Belegung in Sek-I
     * sowie Sprachen aus bestimmten Sprachprüfungen.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     * @param sprache das einstellige Kürzel der Sprache
     *
     * @return true, falls die Sprache als fortgeführte Fremdsprache als EF belegt werden kann, andernfalls false
     */
    static istFortfuehrbareSpracheInGOSt(sprachendaten, sprache) {
        if (sprachendaten === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
            return false;
        }
        if (SprachendatenManager.hatSprachbelegungInSekIMitDauer(sprachendaten, sprache, 2)) {
            return true;
        }
        let pruefungen = sprachendaten.pruefungen;
        if (pruefungen !== null) {
            for (let pruefung of pruefungen) {
                if (!JavaObject_1.JavaObject.equalsTranspiler(sprache, (pruefung.sprache)) && !JavaObject_1.JavaObject.equalsTranspiler(sprache, (pruefung.ersetzteSprache))) {
                    continue;
                }
                if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                    return true;
                }
                if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id)))) {
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * Sammelt alle Sprachen, die in der GOSt als fortgeführte Sprachen belegt werden können, sei
     * es aufgrund einer Belegung von mindestens zwei Jahren oder aufgrund einer Sprachprüfung.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return Liste alle Sprachen, die in der GOSt fortgeführt werden können.
     */
    static getFortfuehrbareSprachenInGOSt(sprachendaten) {
        let sprachen = new Vector_1.Vector();
        if (sprachendaten !== null) {
            let belegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 2);
            for (let belegung of belegungen) {
                sprachen.add(belegung.sprache);
            }
            let pruefungen = sprachendaten.pruefungen;
            if (pruefungen !== null) {
                for (let pruefung of pruefungen) {
                    if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                        sprachen.add(pruefung.ersetzteSprache);
                    }
                    if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id)))) {
                        sprachen.add(pruefung.ersetzteSprache);
                    }
                }
            }
        }
        return sprachen;
    }
    /**
     * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
     * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
     * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
     */
    static hatEineSpracheMitMin4JahrenDauerEndeSekI(sprachendaten) {
        if (sprachendaten === null) {
            return false;
        }
        let anzahlSprachen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4).size();
        if (anzahlSprachen >= 1) {
            return true;
        }
        let pruefungen = sprachendaten.pruefungen;
        if (pruefungen !== null) {
            for (let pruefung of pruefungen) {
                if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * Prüft für den Zeitpunkt Ende Sek-I, ob eine zweite Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
     * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
     * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
     */
    static hatZweiSprachenMitMin4JahrenDauerEndeSekI(sprachendaten) {
        if (sprachendaten === null) {
            return false;
        }
        let belegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4);
        let anzahlSprachen = belegungen.size();
        if (anzahlSprachen >= 2) {
            return true;
        }
        if (anzahlSprachen === 1) {
            let pruefungen = sprachendaten.pruefungen;
            if (pruefungen !== null) {
                for (let pruefung of pruefungen) {
                    if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                        if (!JavaObject_1.JavaObject.equalsTranspiler(belegungen.get(0).sprache, (pruefung.sprache))) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
    /**
     * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde.
     * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
     */
    static hatSpracheMit2JahrenDauerEndeSekI(sprachendaten) {
        if (sprachendaten === null) {
            return false;
        }
        let anzahlSprachen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2).size();
        if (anzahlSprachen >= 1) {
            return true;
        }
        return false;
    }
    /**
     * Prüft, ob eine Sprachfeststellungsprüfung auf dem Niveau der Einführungsphase (EF) der GOSt vorliegt.
     * Nach §11 (2) APO-GOSt setzt das eine Prüfung in der gleichen Sprache am Ende der Sek-I voraus
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return true, falls entsprechende Sprachprüfungen vorhanden sind, andernfalls false.
     */
    static hatSprachfeststellungspruefungAufEFNiveau(sprachendaten) {
        if (sprachendaten === null) {
            return false;
        }
        let pruefungen = sprachendaten.pruefungen;
        if (pruefungen !== null) {
            for (let pruefungS1 of pruefungen) {
                if (pruefungS1.istFeststellungspruefung && (pruefungS1.kannErstePflichtfremdspracheErsetzen || pruefungS1.kannZweitePflichtfremdspracheErsetzen || pruefungS1.kannWahlpflichtfremdspracheErsetzen) && (pruefungS1.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefungS1.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefungS1.note !== null) && (pruefungS1.note <= 4)) {
                    for (let pruefungEF of pruefungen) {
                        if (pruefungEF.istFeststellungspruefung && JavaObject_1.JavaObject.equalsTranspiler(pruefungEF.ersetzteSprache, (pruefungS1.ersetzteSprache)) && (pruefungEF.kannErstePflichtfremdspracheErsetzen || pruefungEF.kannZweitePflichtfremdspracheErsetzen || pruefungEF.kannWahlpflichtfremdspracheErsetzen) && pruefungEF.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_EF.id && (pruefungEF.note !== null) && (pruefungEF.note <= 4)) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
    /**
     * Gibt die Fremdsprache zurück, die als erste Fremdsprache der Sekundarstufe I gewertet werden kann.
     * Im Falle einer Sprachprüfung als erste Pflichtfremdsprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
     * Ist keine Sprachprüfung als erste Pflichtfremdsprache vorhanden, so wird die als erste Sprache in der Sekundarstufe I belegt
     * Sprache zurückgegeben, unabhängig von deren Belegdauer.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return Die erste belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
     */
    static getErsteSpracheInSekI(sprachendaten) {
        if (sprachendaten === null) {
            return null;
        }
        let pruefungen = sprachendaten.pruefungen;
        if (pruefungen !== null) {
            for (let pruefung of pruefungen) {
                if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                    return pruefung.ersetzteSprache;
                }
            }
        }
        let belegungen = sprachendaten.belegungen;
        if (belegungen !== null) {
            let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
            if (sprachbelegungen.size() > 0) {
                return sprachbelegungen.get(0).sprache;
            }
        }
        return null;
    }
    /**
     * Gibt die Fremdsprache zurück, die als zweite Fremdsprache der Sekundarstufe I gewertet werden kann.
     * Im Falle einer Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
     * Ist keine Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache vorhanden, so wird die als zweite Sprache in der Sekundarstufe I belegt
     * Sprache zurückgegeben, unabhängig von deren Belegdauer.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return Die zweite belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
     */
    static getZweiteSpracheInSekI(sprachendaten) {
        if (sprachendaten === null) {
            return null;
        }
        let pruefungErsteSprache = "";
        let pruefungZweiteSprache = "";
        let pruefungen = sprachendaten.pruefungen;
        if (pruefungen !== null) {
            for (let pruefung of pruefungen) {
                if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                    pruefungErsteSprache = pruefung.ersetzteSprache;
                }
                if (pruefung.istFeststellungspruefung && (pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
                    pruefungZweiteSprache = pruefung.ersetzteSprache;
                }
            }
        }
        if (!JavaObject_1.JavaObject.equalsTranspiler(pruefungZweiteSprache, (""))) {
            return pruefungZweiteSprache;
        }
        let belegungen = sprachendaten.belegungen;
        if (belegungen !== null) {
            let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
            if (!JavaObject_1.JavaObject.equalsTranspiler(pruefungErsteSprache, (""))) {
                for (let sprachbelegung of sprachbelegungen) {
                    if (!JavaObject_1.JavaObject.equalsTranspiler(sprachbelegung.sprache, (pruefungErsteSprache))) {
                        return sprachbelegung.sprache;
                    }
                }
            }
            else {
                if (sprachbelegungen.size() > 1) {
                    return sprachbelegungen.get(1).sprache;
                }
            }
        }
        return null;
    }
    /**
     * Ermittelt, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde und gibt sie zurück
     * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
     *
     * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
     *
     * @return Sprache, falls eine Belegung vorhanden ist, sonst null
     */
    static getSpracheMit2JahrenDauerEndeSekI(sprachendaten) {
        if (sprachendaten === null) {
            return null;
        }
        let belegungen = sprachendaten.belegungen;
        if (belegungen !== null) {
            let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2);
            if (sprachbelegungen.size() > 0) {
                return sprachbelegungen.get(0).sprache;
            }
        }
        return null;
    }
    /**
     * Hilfsfunktion, die einen ASDJahrgang nach APO-SI und APO-GOSt und in einen numerischen Wert für Vergleiche umwandelt.
     * Dabei wird EF zu 11, Q1 zu 12 und Q2 zu 13. Die übrigen Stufen werden gemäß ihrer numerischen Stufenangaben umgewandelt.
     *
     * @param ASDJahrgang Der in den mumerischen Wert umzuwandelnde ASDJahrgang.
     *
     * @return Wert des ASDJahrgangs zwischen 5 und 13, wenn dieser nicht bestimmt werden kann, wird der Wert 0 zurückgegeben.
     */
    static ASDJahrgangNumerisch(ASDJahrgang) {
        if (ASDJahrgang === null || JavaObject_1.JavaObject.equalsTranspiler(ASDJahrgang, (""))) {
            return 0;
        }
        switch (ASDJahrgang) {
            case "EF":
                return 11;
            case "Q1":
                return 12;
            case "Q2":
                return 13;
            default:
                try {
                    return JavaInteger_1.JavaInteger.parseInt(ASDJahrgang);
                }
                catch (e) {
                    return 0;
                }
        }
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.SprachendatenManager'].includes(name);
    }
}
exports.SprachendatenManager = SprachendatenManager;
function cast_de_nrw_schule_svws_core_SprachendatenManager(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_SprachendatenManager = cast_de_nrw_schule_svws_core_SprachendatenManager;
//# sourceMappingURL=SprachendatenManager.js.map