"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_types_PersonalTyp = exports.PersonalTyp = void 0;
const JavaObject_1 = require("../../java/lang/JavaObject");
const HashMap_1 = require("../../java/util/HashMap");
class PersonalTyp 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 LEHRKRAFT = new PersonalTyp("LEHRKRAFT", 0, 1, "LEHRKRAFT", "Lehrkraft", null, null);
    static SEKRETARIAT = new PersonalTyp("SEKRETARIAT", 1, 2, "SEKRETARIAT", "Sekretär/Sekretärin", null, null);
    static PERSONAL = new PersonalTyp("PERSONAL", 2, 3, "PERSONAL", "Weiteres Personal", null, null);
    static EXTERN = new PersonalTyp("EXTERN", 3, 4, "EXTERN", "Externe Lehrkraft, z.B. abgeordnet oder im Rahmen einer Kooperation", null, null);
    static SONSTIGE = new PersonalTyp("SONSTIGE", 4, 5, "SONSTIGE", "Sonstiges Personal", null, null);
    static VERSION = 1;
    static _mapBezeichnungen = new HashMap_1.HashMap();
    static _mapID = new HashMap_1.HashMap();
    id;
    kuerzel;
    bezeichnung;
    gueltigVon;
    gueltigBis;
    /**
     * Erzeugt einen neuen PersonalTyp für die Aufzählung.
     *
     * @param id           die ID des Personal-Typs
     * @param kuerzel      das Kürzel des Personal-Typs
     * @param bezeichnung  die Bezeichnung des Personal-Typs
     * @param gueltigVon   gibt an, in welchem Schuljahr der Personaltyp einführt wurde. Ist kein Schuljahr bekannt, so ist null gesetzt.
     * @param gueltigBis   gibt an, bis zu welchem Schuljahr der Personaltyp gültig ist. Ist kein Schuljahr bekannt, so ist null gesetzt.
     */
    constructor(name, ordinal, id, kuerzel, bezeichnung, gueltigVon, gueltigBis) {
        super();
        this.__name = name;
        this.__ordinal = ordinal;
        PersonalTyp.all_values_by_ordinal.push(this);
        PersonalTyp.all_values_by_name.set(name, this);
        this.id = id;
        this.kuerzel = kuerzel;
        this.bezeichnung = bezeichnung;
        this.gueltigVon = gueltigVon;
        this.gueltigBis = gueltigBis;
    }
    /**
     * Gibt eine Map von den IDs der Personal-Typen auf die zugehörigen Personal-Typen
     * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
     *
     * @return die Map von den IDs der Personal-Typen auf die zugehörigen Personal-Typen
     */
    static getMapID() {
        if (PersonalTyp._mapID.size() === 0)
            for (let p of PersonalTyp.values())
                PersonalTyp._mapID.put(p.id, p);
        return PersonalTyp._mapID;
    }
    /**
     * Gibt eine Map von den Bezeichnungen der Personal-Typen auf die zugehörigen Personal-Typen
     * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
     *
     * @return die Map von den Bezeichnungen der Personal-Typen auf die zugehörigen Personal-Typen
     */
    static getMapBezeichnungen() {
        if (PersonalTyp._mapBezeichnungen.size() === 0)
            for (let p of PersonalTyp.values())
                PersonalTyp._mapBezeichnungen.put(p.kuerzel, p);
        return PersonalTyp._mapBezeichnungen;
    }
    /**
     *
     * Gibt den PersonalTyp anhand der Bezeichnung zurück.
     *
     * @param bezeichnung   die Bezeichnung des Personal-Typs
     *
     * @return der Personal-Typ oder null, falls die Bezeichnung ungültig ist
     *
     */
    static fromBezeichnung(bezeichnung) {
        return PersonalTyp.getMapBezeichnungen().get(bezeichnung);
    }
    /**
     *
     * Gibt den PersonalTyp anhand der ID zurück.
     *
     * @param id   die ID des Personal-Typs
     *
     * @return der Personal-Typ oder null, falls die ID ungültig ist
     *
     */
    static fromID(id) {
        return PersonalTyp.getMapID().get(id);
    }
    toString() {
        return this.kuerzel;
    }
    /**
     * 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 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 PersonalTyp))
            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.PersonalTyp'].includes(name);
    }
}
exports.PersonalTyp = PersonalTyp;
function cast_de_nrw_schule_svws_core_types_PersonalTyp(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_types_PersonalTyp = cast_de_nrw_schule_svws_core_types_PersonalTyp;
//# sourceMappingURL=PersonalTyp.js.map