"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_types_statkue_Foerderschwerpunkt = exports.Foerderschwerpunkt = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const Schulform_1 = require("../../../core/types/statkue/Schulform");
const Arrays_1 = require("../../../java/util/Arrays");
const Vector_1 = require("../../../java/util/Vector");
class Foerderschwerpunkt 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 KEINER = new Foerderschwerpunkt("KEINER", 0, "**", "kein Förderschwerpunkt", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "V", "WB"), null, null);
    static BL = new Foerderschwerpunkt("BL", 1, "BL", "Sehen (Blinde)", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static EZ = new Foerderschwerpunkt("EZ", 2, "EZ", "Emotionale und soziale Entwicklung", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static GB = new Foerderschwerpunkt("GB", 3, "GB", "Geistige Entwicklung", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static GH = new Foerderschwerpunkt("GH", 4, "GH", "Hören und Kommunikation (Gehörlose)", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "SR", "V"), null, null);
    static KB = new Foerderschwerpunkt("KB", 5, "KB", "Körperliche und motorische Entwicklung", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "SG", "V"), null, null);
    static KR = new Foerderschwerpunkt("KR", 6, "KR", "Schule für Kranke", Arrays_1.Arrays.asList("FW", "S"), null, null);
    static LB = new Foerderschwerpunkt("LB", 7, "LB", "Lernen", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static PE = new Foerderschwerpunkt("PE", 8, "PE", "Präventive Förderung im Bereich Emotionale und soziale Entwicklung", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static PF = new Foerderschwerpunkt("PF", 9, "PF", "Präventive Förderung", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static PL = new Foerderschwerpunkt("PL", 10, "PL", "Präventive Förderung im Bereich Lernen", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static PS = new Foerderschwerpunkt("PS", 11, "PS", "Präventive Förderung im Bereich Sprache", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static SB = new Foerderschwerpunkt("SB", 12, "SB", "Sprache", Arrays_1.Arrays.asList("FW", "G", "GE", "GM", "GY", "H", "R", "S", "V"), null, null);
    static SG = new Foerderschwerpunkt("SG", 13, "SG", "Hören und Kommunikation (Schwerhörige)", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "SR", "V"), null, null);
    static SH = new Foerderschwerpunkt("SH", 14, "SH", "Sehen (Sehbehinderte)", Arrays_1.Arrays.asList("BK", "FW", "G", "GE", "GM", "GY", "H", "R", "S", "SB", "V"), null, null);
    static XX = new Foerderschwerpunkt("XX", 15, "XX", "Kein Förderschwerpunkt", Arrays_1.Arrays.asList("SB", "SG"), null, null);
    kuerzel;
    beschreibung;
    schulformenKuerzel;
    schulformen = null;
    gueltigVon;
    gueltigBis;
    /**
     * Erzeugt einen neuen Förderschwerpunkt in der Aufzählung.
     *
     * @param kuerzel              das Kürzel, welche im Rahmen der amtlichen Schulstatistik verwendet wird
     * @param beschreibung         die textuelle Bezeichnung des Förderschwerpunktes
     * @param schulformenKuerzel   eine Liste mit den Kürzeln der Schulformen, bei denen der Förderschwerpunkt vorkommt
     */
    constructor(name, ordinal, kuerzel, beschreibung, schulformenKuerzel, gueltigVon, gueltigBis) {
        super();
        this.__name = name;
        this.__ordinal = ordinal;
        Foerderschwerpunkt.all_values_by_ordinal.push(this);
        Foerderschwerpunkt.all_values_by_name.set(name, this);
        this.schulformenKuerzel = schulformenKuerzel;
        this.kuerzel = kuerzel;
        this.beschreibung = beschreibung;
        this.gueltigVon = gueltigVon;
        this.gueltigBis = gueltigBis;
    }
    /**
     * Liefert alle zulässigen Förderschwerpunkte für die angegeben Schulform.
     *
     * @param schulform   die Schulform
     *
     * @return die bei der Schulform zulässigen Förderschwerpunkte
     */
    static get(schulform) {
        let result = new Vector_1.Vector();
        if (schulform === null)
            return result;
        let foerderschwerpunkte = Foerderschwerpunkt.values();
        for (let i = 0; i < foerderschwerpunkte.length; i++) {
            let fs = foerderschwerpunkte[i];
            if (fs.getSchulformen().contains(schulform))
                result.add(fs);
        }
        return result;
    }
    /**
     * Liefert alle Schulformen zurück, bei welchen der Förderschwerpunkt 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 sfKuerzel = this.schulformenKuerzel.get(i);
                let schulform = Schulform_1.Schulform.getByKuerzel(sfKuerzel);
                if (schulform !== null)
                    this.schulformen.add(schulform);
            }
        }
        return this.schulformen;
    }
    /**
     * Liefert den Förderschwerpunkt anhand des übergebenen Kürzels zurück.
     *
     * @param kuerzel   das Kürzel des gesuchten Förderschwerpunktes
     *
     * @return der gesuchte Förderschwerpunkt oder null, wenn kein solcher existiert
     */
    static getByKuerzel(kuerzel) {
        if ((kuerzel === null) || JavaObject_1.JavaObject.equalsTranspiler("", (kuerzel)))
            return null;
        let foerderschwerpunkte = Foerderschwerpunkt.values();
        for (let i = 0; i < foerderschwerpunkte.length; i++) {
            let fs = foerderschwerpunkte[i];
            if (JavaObject_1.JavaObject.equalsTranspiler(fs.kuerzel, (kuerzel)))
                return fs;
        }
        return null;
    }
    /**
     * 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 Foerderschwerpunkt))
            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.Foerderschwerpunkt'].includes(name);
    }
}
exports.Foerderschwerpunkt = Foerderschwerpunkt;
function cast_de_nrw_schule_svws_core_types_statkue_Foerderschwerpunkt(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_types_statkue_Foerderschwerpunkt = cast_de_nrw_schule_svws_core_types_statkue_Foerderschwerpunkt;
//# sourceMappingURL=Foerderschwerpunkt.js.map