"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_types_statkue_Fachgruppe = exports.Fachgruppe = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const HashMap_1 = require("../../../java/util/HashMap");
const Schulform_1 = require("../../../core/types/statkue/Schulform");
const Arrays_1 = require("../../../java/util/Arrays");
const Vector_1 = require("../../../java/util/Vector");
const RGBFarbe_1 = require("../../../core/types/RGBFarbe");
class Fachgruppe extends JavaObject_1.JavaObject {
    /** the name of the enumeration value */
    __name;
    /** the ordinal value for the enumeration value */
    __ordinal;
    /** an array containing all values of this enumeration */
    static all_values_by_ordinal = [];
    /** an array containing all values of this enumeration indexed by their name*/
    static all_values_by_name = new Map();
    static FG1_D = new Fachgruppe("FG1_D", 0, 1, 1, 110, "Deutsch", "D", new RGBFarbe_1.RGBFarbe(253, 233, 217), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 0, true, null, null);
    static FG2_AL = new Fachgruppe("FG2_AL", 1, 2, 2, 400, "Arbeitslehre", "AL", new RGBFarbe_1.RGBFarbe(253, 221, 195), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 12, true, null, null);
    static FG3_FS = new Fachgruppe("FG3_FS", 2, 3, 2, 100, "Fremdsprachen", "FS", new RGBFarbe_1.RGBFarbe(253, 221, 195), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 9, true, null, null);
    static FG4_MS = new Fachgruppe("FG4_MS", 3, 4, 3, 500, "Kunst und Musik", "MS", new RGBFarbe_1.RGBFarbe(252, 204, 165), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 13, true, null, null);
    static FG5_ME = new Fachgruppe("FG5_ME", 4, 5, 4, null, "Literatur, instrumental- oder vokalpraktischer Kurs", "ME", new RGBFarbe_1.RGBFarbe(252, 204, 165), Arrays_1.Arrays.asList("BK", "GE", "GY", "SB", "SG", "WB"), 13, false, null, null);
    static FG6_GS = new Fachgruppe("FG6_GS", 5, 6, 5, 300, "Gesellschaftswissenschaft", "GS", new RGBFarbe_1.RGBFarbe(234, 241, 222), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 11, true, null, null);
    static FG7_PL = new Fachgruppe("FG7_PL", 6, 7, 5, null, "Philosophie", "PL", new RGBFarbe_1.RGBFarbe(234, 241, 222), Arrays_1.Arrays.asList("BK", "GE", "GY", "SB", "SG", "WB"), 11, false, null, null);
    static FG8_RE = new Fachgruppe("FG8_RE", 7, 8, 6, 900, "Religion", "RE", new RGBFarbe_1.RGBFarbe(215, 228, 188), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 6, true, null, null);
    static FG9_M = new Fachgruppe("FG9_M", 8, 9, 7, 700, "Mathematik", "M", new RGBFarbe_1.RGBFarbe(197, 217, 241), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 15, true, null, null);
    static FG10_NW = new Fachgruppe("FG10_NW", 9, 10, 8, 200, "Naturwissenschaften", "NW", new RGBFarbe_1.RGBFarbe(141, 180, 227), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 10, true, null, null);
    static FG11_WN = new Fachgruppe("FG11_WN", 10, 11, 8, null, "weiteres naturwissenschaftliches / technisches Fach", "WN", new RGBFarbe_1.RGBFarbe(141, 180, 227), Arrays_1.Arrays.asList("BK", "GE", "GY", "SB", "SG", "WB"), 10, false, null, null);
    static FG12_SP = new Fachgruppe("FG12_SP", 11, 12, 9, 600, "Sport", "SP", new RGBFarbe_1.RGBFarbe(255, 255, 255), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 14, true, null, null);
    static FG13_VX = new Fachgruppe("FG13_VX", 12, 13, 10, 1500, "Vertiefungskurs", "VX", new RGBFarbe_1.RGBFarbe(216, 216, 216), Arrays_1.Arrays.asList("BK", "GE", "GY", "SB", "SG", "WB"), 0, false, null, null);
    static FG14_PX = new Fachgruppe("FG14_PX", 13, 14, 11, 1600, "Projektkurs", "PX", new RGBFarbe_1.RGBFarbe(191, 191, 191), Arrays_1.Arrays.asList("BK", "GE", "GY", "SB", "SG", "WB"), 0, false, null, null);
    static FG15_BUE = new Fachgruppe("FG15_BUE", 14, 15, null, 10, "Berufsübergreifender Bereich", "BUE", null, Arrays_1.Arrays.asList("BK", "SB"), 1, false, null, null);
    static FG16_BBS = new Fachgruppe("FG16_BBS", 15, 16, null, 20, "Berufsbezogener Bereich", "BBS", null, Arrays_1.Arrays.asList("BK", "SB"), 2, false, null, null);
    static FG17_BBS = new Fachgruppe("FG17_BBS", 16, 17, null, 25, "Berufsbezogener Bereich (Schwerpunkt)", "BBS", null, Arrays_1.Arrays.asList("BK", "SB"), 0, false, null, null);
    static FG18_DF = new Fachgruppe("FG18_DF", 17, 18, null, 30, "Differenzierungsbereich", "DF", null, Arrays_1.Arrays.asList("BK", "SB"), 3, false, null, null);
    static FG19_BP = new Fachgruppe("FG19_BP", 18, 19, null, 40, "Berufspraktikum", "BP", null, Arrays_1.Arrays.asList("BK", "SB"), 4, false, null, null);
    static FG20_BLL = new Fachgruppe("FG20_BLL", 19, 20, null, 60, "besondere Lernleistung", "BLL", null, Arrays_1.Arrays.asList("GE", "GY", "SG", "WB"), 8, false, null, null);
    static FG21_WP = new Fachgruppe("FG21_WP", 20, 21, null, 800, "Wahlpflichtbereich", "WP", null, Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 16, false, null, null);
    static FG22_ZUV = new Fachgruppe("FG22_ZUV", 21, 22, null, 1000, "Zusätzliche Unterrichtsveranstaltungen", "ZUV", null, Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 0, false, null, null);
    static FG23_ANG = new Fachgruppe("FG23_ANG", 22, 23, null, 1100, "Angleichungskurse", "ANG", null, Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 0, false, null, null);
    static FG24_D_SP = new Fachgruppe("FG24_D_SP", 23, 24, null, 1200, "Sprache", "D_SP", null, Arrays_1.Arrays.asList("G", "S", "V"), 0, true, null, null);
    static FG25_SU = new Fachgruppe("FG25_SU", 24, 25, null, 1300, "Sachunterricht", "SU", null, Arrays_1.Arrays.asList("G", "S", "V"), 0, true, null, null);
    static FG26_FOE = new Fachgruppe("FG26_FOE", 25, 26, null, 1400, "Förderunterricht", "FOE", null, Arrays_1.Arrays.asList("G", "S", "V"), 0, true, null, null);
    static FG27_ABA = new Fachgruppe("FG27_ABA", 26, 27, null, 1700, "Abschlussarbeit", "ABA", null, Arrays_1.Arrays.asList("BK", "SB"), 0, false, null, null);
    static FG28_PA = new Fachgruppe("FG28_PA", 27, 28, null, 1800, "Projektarbeit", "PA", null, Arrays_1.Arrays.asList("BK", "SB"), 0, false, null, null);
    static FG29_IF = new Fachgruppe("FG29_IF", 28, 29, null, 1900, "Informatik (Sek I)", "IF", new RGBFarbe_1.RGBFarbe(141, 180, 227), Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V", "WB"), 10, true, null, null);
    static VERSION = 1;
    static _map = new HashMap_1.HashMap();
    id;
    fachbereich;
    idSchild;
    bezeichnung;
    kuerzel;
    farbe;
    schulformenKuerzel;
    schulformen = null;
    sortierung;
    fuerZeugnis;
    gueltigVon;
    gueltigBis;
    /**
     * Erzeugt eine neue Fachgruppe in der Aufzählung.
     *
     * @param id                   die eindeutige ID der Fachgruppe
     * @param fachbereich          die Nummer für den Fachbereich, sofern festgelegt, ansonsten null
     * @param idSchild             die alte Fachgruppen-ID, welche in Schild_NRW 2.x verwendet wurde
     * @param bezeichnung          die Bezeichnung der Fachgruppe
     * @param kuerzel              das Kürzel der Fachgruppe
     * @param farbe                die Farbe, die der Fachgruppe zugeordnet wird oder null, falls die Standard-Farbe Weiss
     *                             zugeordnet werden soll. Diese
     * @param schulformenKuerzel   eine Liste mit den Kürzeln der Schulformen, bei denen die Fachgruppe vorkommt
     * @param sortierung           ein Zahlwert, welche die Standard-Reihenfolge der Fachgruppen in der Visualisierung angibt
     * @param fuerZeugnis          gibt an, ob die Fachgruppe für die Unterteilung auf Zeugnissen genutzt wird oder nicht
     * @param gueltigVon           gibt an, in welchem Schuljahr die Fachgruppe einführt wurde - ist kein Schuljahr bekannt, so wird null gesetzt
     * @param gueltigBis           gibt an, bis zu welchem Schuljahr die Fachgruppe gültig ist - ist kein Schuljahr bekannt, so wird null gesetzt
     */
    constructor(name, ordinal, id, fachbereich, idSchild, bezeichnung, kuerzel, farbe, schulformenKuerzel, sortierung, fuerZeugnis, gueltigVon, gueltigBis) {
        super();
        this.__name = name;
        this.__ordinal = ordinal;
        Fachgruppe.all_values_by_ordinal.push(this);
        Fachgruppe.all_values_by_name.set(name, this);
        this.schulformenKuerzel = schulformenKuerzel;
        this.id = id;
        this.fachbereich = fachbereich;
        this.idSchild = idSchild;
        this.bezeichnung = bezeichnung;
        this.kuerzel = kuerzel;
        this.farbe = (farbe === null) ? new RGBFarbe_1.RGBFarbe(255, 255, 255) : farbe;
        this.sortierung = sortierung;
        this.fuerZeugnis = fuerZeugnis;
        this.gueltigVon = null;
        this.gueltigBis = null;
    }
    /**
     * Gibt eine Map von den IDs der Fachgruppen auf die zugehörigen Fachgruppen
     * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
     *
     * @return die Map von den IDs der Fachgruppen auf die zugehörigen Fachgruppen
     */
    static getMap() {
        if (Fachgruppe._map.size() === 0)
            for (let g of Fachgruppe.values())
                Fachgruppe._map.put(g.id, g);
        return Fachgruppe._map;
    }
    /**
     * Liefert alle Schulformen zurück, bei welchen die Schulgliederung vorkommt.
     *
     * @return eine Liste der Schulformen
     */
    getSchulformen() {
        if (this.schulformen === null) {
            this.schulformen = new Vector_1.Vector();
            for (let i = 0; i < this.schulformenKuerzel.size(); i++) {
                let schulform = Schulform_1.Schulform.getByKuerzel(this.schulformenKuerzel.get(i));
                if (schulform !== null)
                    this.schulformen.add(schulform);
            }
        }
        return this.schulformen;
    }
    /**
     * Prüft, ob die Schulform bei diesem Fach in irgendeiner Gliederung der
     * angegebenen Schulform zulässig ist.
     *
     * @param schulform    die Schulform
     *
     * @return true, falls das Fach in der Schulform zulässig ist, ansonsten false.
     */
    hasSchulform(schulform) {
        if (schulform === null)
            return false;
        if (this.schulformenKuerzel !== null) {
            for (let i = 0; i < this.schulformenKuerzel.size(); i++) {
                let sfKuerzel = this.schulformenKuerzel.get(i);
                if (JavaObject_1.JavaObject.equalsTranspiler(sfKuerzel, (schulform.kuerzel)))
                    return true;
            }
        }
        return false;
    }
    /**
     * Liefert die Fachgruppe zu der übergebenen ID der Fachgruppe zurück.
     *
     * @param id   die ID der Fachgruppe
     *
     * @return die Fachgruppe oder null, falls die id ungültig ist
     */
    static getByID(id) {
        return Fachgruppe.getMap().get(id);
    }
    /**
     * Bestimmt alle Fachgruppen, die in irgendeiner Gliederung der angegebenen Schulform
     * zulässig sind.
     *
     * @param schulform    die Schulform
     *
     * @return die Fachgruppen in der angegebenen Schulform
     */
    static get(schulform) {
        let faecher = new Vector_1.Vector();
        if (schulform === null)
            return faecher;
        let fachgruppen = Fachgruppe.values();
        for (let i = 0; i < fachgruppen.length; i++) {
            let fg = fachgruppen[i];
            if (fg.hasSchulform(schulform))
                faecher.add(fg);
        }
        return faecher;
    }
    /**
     * Returns the name of this enumeration value.
     *
     * @returns the name
     */
    name() {
        return this.__name;
    }
    /**
     * Returns the ordinal value of this enumeration value.
     *
     * @returns the ordinal value
     */
    ordinal() {
        return this.__ordinal;
    }
    /**
     * Returns the name of this enumeration value.
     *
     * @returns the name
     */
    toString() {
        return this.__name;
    }
    /**
     * Returns true if this and the other enumeration values are equal.
     *
     * @param other   the other enumeration value
     *
     * @returns true if they are equal and false otherwise
     */
    equals(other) {
        if (!(other instanceof Fachgruppe))
            return false;
        return this === other;
    }
    /**
     * Returns the ordinal value as hashcode, since the ordinal value is unique.
     *
     * @returns the ordinal value as hashcode
     */
    hashCode() {
        return this.__ordinal;
    }
    /**
     * Compares this enumeration value with the other enumeration value by their ordinal value.
     *
     * @param other   the other enumeration value
     *
     * @returns a negative, zero or postive value as this enumeration value is less than, equal to
     *          or greater than the other enumeration value
     */
    compareTo(other) {
        return this.__ordinal - other.__ordinal;
    }
    /**
     * Returns an array with enumeration values.
     *
     * @returns the array with enumeration values
     */
    static values() {
        return [...this.all_values_by_ordinal];
    }
    /**
     * Returns the enumeration value with the specified name.
     *
     * @param name   the name of the enumeration value
     *
     * @returns the enumeration values or null
     */
    static valueOf(name) {
        let tmp = this.all_values_by_name.get(name);
        return (!tmp) ? null : tmp;
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.types.statkue.Fachgruppe'].includes(name);
    }
}
exports.Fachgruppe = Fachgruppe;
function cast_de_nrw_schule_svws_core_types_statkue_Fachgruppe(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_types_statkue_Fachgruppe = cast_de_nrw_schule_svws_core_types_statkue_Fachgruppe;
//# sourceMappingURL=Fachgruppe.js.map