"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungStatic = exports.KursblockungStatic = void 0;
const JavaObject_1 = require("../../java/lang/JavaObject");
const KursblockungInputRegel_1 = require("../../core/data/kursblockung/KursblockungInputRegel");
class KursblockungStatic extends JavaObject_1.JavaObject {
    constructor() {
        super();
    }
    /**
     * Erzeugt ein Array der Größe {@code n}, füllt es mit den Zahlen
     * {@code 0 bis n-1} und permutiert das Array dann zufällig.
     *
     * @param n Die Größe des Arrays.
     * @return Eine Array-Referenz.
     */
    static gibPermutation(n) {
        let temp = Array(n).fill(0);
        for (let i = 0; i < n; i++) {
            temp[i] = i;
        }
        KursblockungStatic.aktionPermutiere(temp);
        return temp;
    }
    /**
     * Permutiert das Array {@code perm} zufällig.
     *
     * @param perm Das zu permutierende Array.
     */
    static aktionPermutiere(perm) {
        let n = perm.length;
        for (let i1 = 0; i1 < n; i1++) {
            let i2 = (Math.random() * n);
            let s1 = perm[i1];
            let s2 = perm[i2];
            perm[i1] = s2;
            perm[i2] = s1;
        }
    }
    /**
     * Erweitert die Eingabedaten {@link KursblockungInput} um eine Regel, welche
     * bestimmte Schienen für bestimmte Kursarten sperrt.
     *
     * @param pInput   Das Eingabeojekt, welchem eine neue Regel hinzugefügt wird.
     * @param pKursart Eine String-Darstellung der Kursart.
     * @param pVon     Sperrung aller Schienen von (inklusive, 0-indiziert).
     * @param pBis     Sperrung aller Schienen bis (inklusive, 0-indiziert).
     */
    static aktionSperreSchieneFuerKursart(pInput, pKursart, pVon, pBis) {
        for (let i = 0; i < pInput.kursarten.size(); i++) {
            let kursart = pInput.kursarten.get(i);
            if (JavaObject_1.JavaObject.equalsTranspiler(kursart.representation, (pKursart))) {
                let r = new KursblockungInputRegel_1.KursblockungInputRegel();
                r.id = 1;
                r.daten = [kursart.id, pVon, pBis];
                pInput.regeln.add(r);
            }
        }
    }
    /**
     * Erweitert die Eingabedaten {@link KursblockungInput} um Regeln, die bestimmte
     * Kurse in einer Schiene fixieren, andere Kurse die Schiene verbieten.
     *
     * @param pInput     Das Eingabeojekt, welchem eine neue Regel hinzugefügt wird.
     * @param pKursnamen Die zu fixierenden Kursnamen
     * @param pSchiene   Die Schiene in der die Kurse (und nur diese) liegen sollen.
     */
    static aktionFixiereKurseInSchieneSonstNichts(pInput, pKursnamen, pSchiene) {
        for (let i = 0; i < pInput.kurse.size(); i++) {
            let kurs = pInput.kurse.get(i);
            let gefunden = false;
            for (let j = 0; j < pKursnamen.length; j++) {
                if (JavaObject_1.JavaObject.equalsTranspiler(kurs.representation, (pKursnamen[j]))) {
                    gefunden = true;
                }
            }
            let r = new KursblockungInputRegel_1.KursblockungInputRegel();
            if (gefunden) {
                r.id = 2;
                r.daten = [kurs.id, pSchiene];
            }
            else {
                r.id = 3;
                r.daten = [kurs.id, pSchiene];
            }
            pInput.regeln.add(r);
        }
    }
    isTranspiledInstanceOf(name) {
        return ['de.nrw.schule.svws.core.kursblockung.KursblockungStatic'].includes(name);
    }
}
exports.KursblockungStatic = KursblockungStatic;
function cast_de_nrw_schule_svws_core_kursblockung_KursblockungStatic(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_kursblockung_KursblockungStatic = cast_de_nrw_schule_svws_core_kursblockung_KursblockungStatic;
//# sourceMappingURL=KursblockungStatic.js.map