"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_utils_enm_ENMDatenManager = exports.ENMDatenManager = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const ENMKlasse_1 = require("../../../core/data/enm/ENMKlasse");
const ENMLeistung_1 = require("../../../core/data/enm/ENMLeistung");
const ENMFach_1 = require("../../../core/data/enm/ENMFach");
const ENMJahrgang_1 = require("../../../core/data/enm/ENMJahrgang");
const HashMap_1 = require("../../../java/util/HashMap");
const ENMLerngruppe_1 = require("../../../core/data/enm/ENMLerngruppe");
const ENMLehrer_1 = require("../../../core/data/enm/ENMLehrer");
const ENMSchueler_1 = require("../../../core/data/enm/ENMSchueler");
const ENMFoerderschwerpunkt_1 = require("../../../core/data/enm/ENMFoerderschwerpunkt");
const ENMDaten_1 = require("../../../core/data/enm/ENMDaten");
const Note_1 = require("../../../core/types/Note");
const ENMNote_1 = require("../../../core/data/enm/ENMNote");
const Foerderschwerpunkt_1 = require("../../../core/types/statkue/Foerderschwerpunkt");
class ENMDatenManager extends JavaObject_1.JavaObject {
    daten;
    mapLehrer = new HashMap_1.HashMap();
    mapSchueler = new HashMap_1.HashMap();
    mapFaecher = new HashMap_1.HashMap();
    mapJahrgaenge = new HashMap_1.HashMap();
    mapKlassen = new HashMap_1.HashMap();
    lerngruppenIDZaehler = 1;
    mapLerngruppen = new HashMap_1.HashMap();
    /**
     * Implementation for method overloads of 'constructor'
     */
    constructor(__param0) {
        super();
        if ((typeof __param0 === "undefined")) {
            this.daten = new ENMDaten_1.ENMDaten();
        }
        else if (((typeof __param0 !== "undefined") && ((__param0 instanceof JavaObject_1.JavaObject) && (__param0.isTranspiledInstanceOf('de.nrw.schule.svws.core.data.enm.ENMDaten'))))) {
            let daten = (0, ENMDaten_1.cast_de_nrw_schule_svws_core_data_enm_ENMDaten)(__param0);
            this.daten = daten;
        }
        else
            throw new Error('invalid method overload');
    }
    /**
     * Fügt alle Noten des Core-Type {@link Note} zu dem Noten-Katalog der ENM-Datei hinzu.
     */
    addNoten() {
        if (this.daten.noten.size() > 0)
            return;
        let noten = Note_1.Note.values();
        for (let i = 0; i < noten.length; i++) {
            let note = noten[i];
            let enmNote = new ENMNote_1.ENMNote();
            enmNote.kuerzel = note.kuerzel;
            enmNote.notenpunkte = note.notenpunkte;
            enmNote.text = note.text;
            this.daten.noten.add(enmNote);
        }
    }
    /**
     * Fügt alle Förderschwerpunkte des Core-Type {@link Foerderschwerpunkt} zu dem
     * Förderschwerpunkt-Katalog der ENM-Datei hinzu.
     *
     * @param schulform   die Schulform, für welche die zulässigen Förderschwerpunkte
     *                    zurückgegeben werden
     */
    addFoerderschwerpunkte(schulform) {
        if (this.daten.foerderschwerpunkte.size() > 0)
            return;
        let foerderschwerpunkte = Foerderschwerpunkt_1.Foerderschwerpunkt.get(schulform);
        for (let i = 0; i < foerderschwerpunkte.size(); i++) {
            let foerderschwerpunkt = foerderschwerpunkte.get(i);
            let enmFoerderschwerpunkt = new ENMFoerderschwerpunkt_1.ENMFoerderschwerpunkt();
            enmFoerderschwerpunkt.kuerzel = foerderschwerpunkt.kuerzel;
            enmFoerderschwerpunkt.beschreibung = foerderschwerpunkt.beschreibung;
            this.daten.foerderschwerpunkte.add(enmFoerderschwerpunkt);
        }
    }
    /**
     * Fügt einen Lehrer hinzu und überprüft dabei, ob der Lehrer schon in der Liste vorhanden ist.
     *
     * @param id            die eindeutige ID des Lehrers
     * @param kuerzel       das Kürzel des Lehrers
     * @param nachname      der Nachname des Lehrers
     * @param vorname       der Vorname des Lehrers
     * @param eMailDienstlich   die Dienst-Email-Adresse des Lehrers
     *
     * @return true, falls der Lehrer hinzugefügt wurde, ansonsten false
     */
    addLehrer(id, kuerzel, nachname, vorname, eMailDienstlich) {
        if (this.mapLehrer.get(id) !== null)
            return false;
        let enmLehrer = new ENMLehrer_1.ENMLehrer();
        enmLehrer.id = id;
        enmLehrer.kuerzel = kuerzel;
        enmLehrer.nachname = nachname;
        enmLehrer.vorname = vorname;
        enmLehrer.eMailDienstlich = eMailDienstlich;
        this.daten.lehrer.add(enmLehrer);
        this.mapLehrer.put(id, enmLehrer);
        return true;
    }
    /**
     * Fügt einen Schueler hinzu und überprüft dabei, ob der Schueler schon in der Liste vorhanden ist.
     *
     * @param id                  die ID des Schülers in der SVWS-DB
     * @param jahrgangID          die ID des aktuellen Jahrgangs, in dem sich der Schüler befindet
     * @param klasseID            die ID der aktuellen Klasse, in der sich der Schüler befindet
     * @param nachname            der Nachname des Schülers (z.B. Mustermann)
     * @param vorname             der Vorname des Schülers (z.B. Max)
     * @param geschlecht          das Geschlecht des Schülers
     * @param bilingualeSprache   gibt an, ob sich der Schüler aktuell im bilingualen Bildungsgang befindet
     *                            (wenn ja, z.B. F) oder nicht (null)
     * @param istZieldifferent    gibt an, ob der Schüler Ziel-different unterrichtet wird
     * @param istDaZFoerderung    gibt an, ob der Schüler Deutsch-Förderung mit Deutsch als Zweitsprache (DaZ)
     *                            bekommt (Seiteneinsteiger, z.B. Flüchtlingskinder)
     *
     * @return true, falls der Schueler hinzugefügt wurde, ansonsten false
     */
    addSchueler(id, jahrgangID, klasseID, nachname, vorname, geschlecht, bilingualeSprache, istZieldifferent, istDaZFoerderung) {
        if (this.mapSchueler.get(id) !== null)
            return false;
        let enmSchueler = new ENMSchueler_1.ENMSchueler();
        enmSchueler.id = id;
        enmSchueler.jahrgangID = jahrgangID;
        enmSchueler.nachname = nachname;
        enmSchueler.vorname = vorname;
        enmSchueler.geschlecht = geschlecht.kuerzel;
        enmSchueler.bilingualeSprache = bilingualeSprache;
        enmSchueler.istZieldifferent = istZieldifferent;
        enmSchueler.istDaZFoerderung = istDaZFoerderung;
        this.daten.schueler.add(enmSchueler);
        this.mapSchueler.put(id, enmSchueler);
        return true;
    }
    /**
     * Fügt ein Fach hinzu und überprüft dabei, ob das Fach schon in der Liste vorhanden ist.
     *
     * @param id                die eindeutige ID des Faches
     * @param kuerzel           das Kürzel des Faches, wie es im Rahmen der amtlichen Schulstatistik verwendet wird. (z.B. D)
     * @param kuerzelAnzeige    das Kürzel des Faches, wie es im Rahmen der Schule benannt wird und angezeigt werden soll. (z.B. D)
     * @param sortierung        die Reihenfolge des Faches bei der Sortierung der Fächer. (z.B. 37)
     * @param istFremdsprache   gibt an, ob es sich bei dem Fach um eine Fremdsprache handelt oder nicht
     *
     * @return true, falls das Fach hinzugefügt wurde, ansonsten false
     */
    addFach(id, kuerzel, kuerzelAnzeige, sortierung, istFremdsprache) {
        if (this.mapFaecher.get(id) !== null)
            return false;
        let enmFach = new ENMFach_1.ENMFach();
        enmFach.id = id;
        enmFach.kuerzel = kuerzel;
        enmFach.kuerzelAnzeige = kuerzelAnzeige;
        enmFach.sortierung = sortierung;
        enmFach.istFremdsprache = istFremdsprache;
        this.daten.faecher.add(enmFach);
        this.mapFaecher.put(id, enmFach);
        return true;
    }
    /**
     * Fügt einen Jahrgang hinzu und überprüft dabei, ob der Jahrgang schon in der Liste vorhanden ist.
     *
     * @param id                die eindeutige ID des Jahrganges
     * @param kuerzel           das Kürzel des Jahrgangs, wie es im Rahmen der amtlichen Schulstatistik verwendet wird. (z.B. EF)
     * @param kuerzelAnzeige    das Kürzel des Jahrgangs, wie es im Rahmen der Schule benannt wird und angezeigt werden soll. (z.B. EF)
     * @param beschreibung      die textuelle Bezeichnung des Jahrgangs. (z.B. Einführungsphase)
     * @param stufe             die Stufe des Jahrgangs. (z.B. PR, SI, nur Berufskolleg: SII, Berufskolleg Anlage D und GOSt: SII-1, SII-2, SII-3)
     * @param sortierung        die Reihenfolge des Jahrgangs bei der Sortierung der Jahrgänge. (z.B. 8)
     *
     * @return true, falls der Jahrgang hinzugefügt wurde, ansonsten false
     */
    addJahrgang(id, kuerzel, kuerzelAnzeige, beschreibung, stufe, sortierung) {
        if (this.mapJahrgaenge.get(id) !== null)
            return false;
        let enmJahrgang = new ENMJahrgang_1.ENMJahrgang();
        enmJahrgang.id = id;
        enmJahrgang.kuerzel = kuerzel;
        enmJahrgang.kuerzelAnzeige = kuerzelAnzeige;
        enmJahrgang.beschreibung = beschreibung;
        enmJahrgang.stufe = stufe;
        enmJahrgang.sortierung = sortierung;
        this.daten.jahrgaenge.add(enmJahrgang);
        this.mapJahrgaenge.put(id, enmJahrgang);
        return true;
    }
    /**
     * Fügt eine Klasse hinzu und überprüft dabei, ob die Klasse schon in der Liste vorhanden ist.
     *
     * @param id                die eindeutige ID der Klasse
     * @param kuerzel           das Kürzel der Klasse, wie es im Rahmen der amtlichen Schulstatistik verwendet wird. (z.B. EF)
     * @param kuerzelAnzeige    das Kürzel der Klasse, wie es im Rahmen der Schule benannt wird und angezeigt werden soll. (z.B. EF)
     * @param sortierung        die Reihenfolge der Klasse bei der Sortierung der Klassen. (z.B. 8)
     *
     * @return true, falls die Klasse hinzugefügt wurde, ansonsten false
     */
    addKlasse(id, kuerzel, kuerzelAnzeige, sortierung) {
        if (this.mapKlassen.get(id) !== null)
            return false;
        let enmKlasse = new ENMKlasse_1.ENMKlasse();
        enmKlasse.id = id;
        enmKlasse.kuerzel = kuerzel;
        enmKlasse.kuerzelAnzeige = kuerzelAnzeige;
        enmKlasse.sortierung = sortierung;
        this.daten.klassen.add(enmKlasse);
        this.mapKlassen.put(id, enmKlasse);
        return true;
    }
    /**
     * Liefert das ENM-Lehrer-Objekt für die angegebene Lehrer-ID zurück,
     * sofern die Lehrer über die Methode {@link ENMDatenManager#addLehrer(long, String, String, String, String)}
     * hinzugefügt wurden.
     *
     * @param id   die ID des Lehrers
     *
     * @return das ENM-Lehrer-Objekt
     */
    getLehrer(id) {
        return this.mapLehrer.get(id);
    }
    /**
     * Liefert das ENM-Schüler-Objekt für die angegebene Schüler-ID zurück,
     * sofern die Schüler über die Methode {@link ENMDatenManager#addSchueler(long, long, long, String, String, Geschlecht, String, boolean, boolean)}
     * hinzugefügt wurden.
     *
     * @param id   die ID des Schülers
     *
     * @return das ENM-Schüler-Objekt
     */
    getSchueler(id) {
        return this.mapSchueler.get(id);
    }
    /**
     * Liefert das ENM-Fächer-Objekt für die angegebene Fächer-ID zurück,
     * sofern die Fächer über die Methode {@link ENMDatenManager#addFach(long, String, String, int, boolean)}
     * hinzugefügt wurden.
     *
     * @param id   die ID des Faches
     *
     * @return das ENM-Fächer-Objekt
     */
    getFach(id) {
        return this.mapFaecher.get(id);
    }
    /**
     * Liefert das ENM-Jahrgänge-Objekt für die angegebene Jahrgangs-ID zurück,
     * sofern die Jahrgänge über die Methode {@link ENMDatenManager#addJahrgang(long, String, String, String, String, int)}
     * hinzugefügt wurden.
     *
     * @param id   die ID des Jahrgangs
     *
     * @return das ENM-Jahrgänge-Objekt
     */
    getJahrgang(id) {
        return this.mapJahrgaenge.get(id);
    }
    /**
     * Liefert das ENM-Klassen-Objekt für die angegebene Klassen-ID zurück,
     * sofern die Klassen über die Methode {@link ENMDatenManager#addKlasse(long, String, String, int)}
     * hinzugefügt wurden.
     *
     * @param id   die ID der Klasse
     *
     * @return das ENM-Klassen-Objekt
     */
    getKlasse(id) {
        return this.mapKlassen.get(id);
    }
    /**
     * Fügt eine neue Lerngruppe mit den angegebenen Parametern hinzu, falls sie noch nicht existiert. Die strID ist dabei
     * eine temporäre ID, die nur bei der Erstellung von ENMLerngruppen auf Serverseite genutzt wird.
     *
     * @param strID               die temporäre ID der Lerngruppe, um festzustellen, ob es diese Lerngruppe bereits gibt.
     * @param kID                 die ID der Lerngruppe (Klasse oder Kurs) in der SVWS-DB
     * @param fachID              die ID des Faches der Lerngruppe.
     * @param kursartID           gibt die ID der Kursart an. Ist dieser Wert null, so handelt es sich um Klassen-Unterricht
     * @param bezeichnung         die Bezeichnung der Lerngruppe (z.B. D-GK4)
     * @param kursartKuerzel      das Kürzel der (allgemeinen) Kursart (z.B. GK)
     * @param bilingualeSprache   das einstellige Kürzel der bilingualen Sprache, sofern es sich um eine bilinguale
     *                            Lerngruppe handelt. (z.B. F)
     * @param wochenstunden       die Anzahl der Wochenstunden, falls es sich um einen Kurs handelt.
     */
    addLerngruppe(strID, kID, fachID, kursartID, bezeichnung, kursartKuerzel, bilingualeSprache, wochenstunden) {
        if (this.mapLerngruppen.get(strID) !== null)
            return;
        let lerngruppe = new ENMLerngruppe_1.ENMLerngruppe();
        lerngruppe.id = this.lerngruppenIDZaehler++;
        lerngruppe.kID = kID;
        lerngruppe.fachID = fachID;
        lerngruppe.kursartID = kursartID;
        lerngruppe.bezeichnung = bezeichnung;
        lerngruppe.kursartKuerzel = kursartKuerzel;
        lerngruppe.bilingualeSprache = bilingualeSprache;
        lerngruppe.wochenstunden = wochenstunden;
        this.mapLerngruppen.put(strID, lerngruppe);
        this.daten.lerngruppen.add(lerngruppe);
    }
    /**
     * Liefert die Lerngruppe mit der übergebenen (temporären) ID zurück.
     *
     * @param strID   die temporäre ID der Lerngruppe, um festzustellen, ob es diese Lerngruppe bereits gibt.
     *
     * @return die Lerngruppe
     */
    getLerngruppe(strID) {
        return this.mapLerngruppen.get(strID);
    }
    /**
     * Fügt die Klassenlehrer zu der List der Klassenlehrer bei einem Schüler hinzu
     *
     * @param schueler           der Schüler
     * @param klassenlehrerIDs   die IDs der Klassenlehrer
     */
    addSchuelerKlassenlehrer(schueler, ...klassenlehrerIDs) {
    }
    /**
     * Fügt eine Sprache mit den übergebenen Informationen zu der Sprachenfolge eines Schülers hinzu.
     *
     * @param schueler               der Schüler
     * @param sprache                das Kürzel der Sprache, bereinigt von dem Jahrgang, in dem die Sprache eingesetzt hat
     * @param fachID                 die ID des Faches
     * @param fachKuerzel            das Kürzel des Faches
     * @param reihenfolge            die Reihenfolge des Faches in der Sprachenfolge (Beispiel 1)
     * @param belegungVonJahrgang    die Information, ab welchem Jahrgang die Sprache belegt wurde (Beispiel 5)
     * @param belegungVonAbschnitt   die Information, ab welchem Abschnitt in dem Jahrgang die Sprache belegt wurde (Beispiel 1)
     * @param belegungBisJahrgang    die Information, bis zu welchem Jahrgang die Sprache belegt wurde (Beispiel 12), sofern die Sprache bereits abgeschlossen ist
     * @param belegungBisAbschnitt   die Information, bis zu welchem Abschnitt in dem Jahrgang die Sprache belegt wurde (Beispiel 2), sofern die Sprache bereits abgeschlossen ist
     * @param referenzniveau         die Bezeichnung des Sprachreferenzniveaus, welches bisher erreicht wurde (z.B. B2/C1)
     * @param belegungSekI           die Mindest-Dauer der Belegung in der Sekundarstufe I gemäß den Stufen im Core-Type SprachBelegungSekI (z.B. 0, 2, 4, 6)
     */
    addSchuelerSprachenfolge(schueler, sprache, fachID, fachKuerzel, reihenfolge, belegungVonJahrgang, belegungVonAbschnitt, belegungBisJahrgang, belegungBisAbschnitt, referenzniveau, belegungSekI) {
    }
    /**
     * Fügt die Leistungsdaten mit den übergebenen Informationen zu den Leistungsdaten eines Schülers hinzu
     *
     * @param schueler                    der Schüler
     * @param leistungID                  die ID der Leistungsdaten des Schülers in der SVWS-DB (z.B. 307956)
     * @param lerngruppenID               die eindeutige ID der Lerngruppe, der der Schüler zugeordnet ist.
     *                                    (Klasse oder Kurs wird erst in der Lerngruppe unterschieden!)
     * @param note                        das Kürzel der Note, die vergeben wurde
     * @param istSchriftlich              gibt an, ob das Fach schriftlich belegt wurde oder nicht
     * @param abiturfach                  gibt an, ob es sich um ein Abitufach handelt (1,2,3 oder 4) oder nicht (null)
     * @param fehlstundenGesamt           gibt die Anzahl der gesamten Fehlstunden an, sofern diese fachbezogen ermittel werden
     * @param fehlstundenUnentschuldigt   gibt die Anzahl der unentschuldigten Fehlstunden an, sofern diese fachbezogen ermittel werden
     * @param fachbezogeneBemerkungen     die fachbezogenen Bemerkungen bzw. das Thema bei Projektkursen
     * @param neueZuweisungKursart        die Kurszuweisung, die auf dem Zeugnis erscheinen soll für den nächsten Kursabschnitt
     *                                    (z.B. E oder G-Kurs, z.B. an der Gesamtschule)
     */
    addSchuelerLeistungsdaten(schueler, leistungID, lerngruppenID, note, istSchriftlich, abiturfach, fehlstundenGesamt, fehlstundenUnentschuldigt, fachbezogeneBemerkungen, neueZuweisungKursart) {
        let enmLeistung = new ENMLeistung_1.ENMLeistung();
        enmLeistung.id = leistungID;
        enmLeistung.lerngruppenID = lerngruppenID;
        enmLeistung.note = note;
        enmLeistung.istSchriftlich = istSchriftlich;
        enmLeistung.abiturfach = abiturfach;
        enmLeistung.fehlstundenGesamt = fehlstundenGesamt;
        enmLeistung.fehlstundenUnentschuldigt = fehlstundenUnentschuldigt;
        enmLeistung.fachbezogeneBemerkungen = fachbezogeneBemerkungen;
        enmLeistung.neueZuweisungKursart = neueZuweisungKursart;
        schueler.leistungsdaten.add(enmLeistung);
    }
    /**
     * Fügt die Teilleistung mit den übergebenen Angaben zu übergebenen Leistungsdaten
     * eines Schülers hinzu.
     *
     * @param leistung       die Leistungsdaten eines Schülers
     * @param id             die ID der Teilleistung
     * @param artID          die ID der Art von Teileistungen
     * @param datum          das Datum, welches dem Erbringen der Teilleistung zuzuordnen ist (z.B. Klausurdatum)
     * @param bemerkung      ggf. eine Bemerkung zu der Teilleistung
     * @param notenKuerzel   das Notenkürzel, welches der Teilleistung zuzuordnen ist.
     */
    addSchuelerTeilleistung(leistung, id, artID, datum, bemerkung, notenKuerzel) {
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.utils.enm.ENMDatenManager'].includes(name);
    }
}
exports.ENMDatenManager = ENMDatenManager;
function cast_de_nrw_schule_svws_core_utils_enm_ENMDatenManager(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_utils_enm_ENMDatenManager = cast_de_nrw_schule_svws_core_utils_enm_ENMDatenManager;
//# sourceMappingURL=ENMDatenManager.js.map