import { JavaObject } from '../../java/lang/JavaObject';
import { KursblockungDynFachart } from '../../core/kursblockung/KursblockungDynFachart';
import { KursblockungDynStatistik } from '../../core/kursblockung/KursblockungDynStatistik';
import { KursblockungInputSchueler } from '../../core/data/kursblockung/KursblockungInputSchueler';
import { Vector } from '../../java/util/Vector';
import { KursblockungOutputFachwahlZuKurs } from '../../core/data/kursblockung/KursblockungOutputFachwahlZuKurs';
export declare class KursblockungDynSchueler extends JavaObject {
    private readonly representation;
    private fachartArr;
    private fachartZuGUI;
    private fachartZuKurs;
    private fachartZuKursSaveS;
    private fachartZuKursSaveK;
    private readonly statistik;
    private nichtwahlen;
    private readonly schieneBelegt;
    private static dummy;
    private matrix;
    /**
     * Im Konstruktor wird {@code pSchueler} in ein Objekt dieser Klasse
     * umgewandelt.
     *
     * @param pStatistik      Referenz um die Nichtwahlen mitzuteilen.
     * @param pSchueler       Die Schüler-Daten von der GUI/DB.
     * @param pSchienenAnzahl Wir benötigt, um {@link #schieneBelegt} zu
     *                        initialisieren.
     */
    constructor(pSchueler: KursblockungInputSchueler, pStatistik: KursblockungDynStatistik, pSchienenAnzahl: number);
    toString(): String;
    /**
     * Eine String-Darstellung des Schülers. Beinhaltet meistens den Vornamen, den
     * Nachnamen, das Geburtsdatum und das Geschlecht.
     *
     * @return Eine String-Darstellung des Schülers.
     */
    gibRepresentation(): String;
    /**
     * Liefert die aktuelle Anzahl an Nichtwahlen.
     *
     * @return Die aktuelle Anzahl an Nichtwahlen.
     */
    gibNichtwahlen(): number;
    /**
     * Liefert ein Array aller Facherten (= Fachwahlen) des Schülers.
     *
     * @return Ein Array aller Facherten (= Fachwahlen) des Schülers.
     */
    gibFacharten(): Array<KursblockungDynFachart>;
    /**
     * Setzt alle Facharten (=Fachwahlen) des Schülers.
     *
     * @param pFacharten Die Facharten des Schülers.
     * @param pIDs       Die zur Fachwahl zugehörige ID der GUI bzw. Datenbank.
     */
    aktionSetzeFachartenUndIDs(pFacharten: Array<KursblockungDynFachart>, pIDs: Array<number>): void;
    /**
     * Speichert die aktuell belegten Kurse im Zustand S.
     */
    aktionZustandSpeichernS(): void;
    /**
     * Speichert die aktuell belegten Kurse im Zustand K.
     */
    aktionZustandSpeichernK(): void;
    /**
     * Entfernt zunächst den Schüler aus seinen aktuellen Kursen und setzt ihn dann
     * in die Kurse, die zuvor im Zustand S gespeichert wurden.
     */
    aktionZustandLadenS(): void;
    /**
     * Entfernt zunächst den Schüler aus seinen aktuellen Kursen und setzt ihn dann
     * in die Kurse, die zuvor im Zustand K gespeichert wurden.
     */
    aktionZustandLadenK(): void;
    private aktionWaehleKurse;
    /**
     * Entfernt den Schüler aus seinen aktuell zugeordneten Kursen.
     */
    aktionKurseAlleEntfernen(): void;
    /**
     * Geht die Facharten durch (Facharten mit einer kleineren Kursanzahl zuerst)
     * und geht dann pro Fachart alle Kurse durch (Kurse mit kleinerer Schüleranzahl
     * zuerst). Falls der Kurs wählbar ist, wird der Schüler hinzugefügt und es geht
     * weiter mit der nächsten Fachart. Ein Kurs ist wählbar, wenn nicht bereits ein
     * Kurs zugeordnet wurde und die Schienen in den der Kurs sind frei sind.<br>
     *
     * Falls der Paramter {@code pNurMultikurse} TRUE ist, dann werden nur
     * Multikurse verteilt.
     *
     * @param pNurMultikurse Falls TRUE ist, dann werden nur Multikurse verteilt.
     */
    aktionKurseZufaelligVerteilen(pNurMultikurse: boolean): void;
    /**
     * Verteilt alle Kurse die über genau 1 Schiene gehen mit Hilfe eines Matching
     * Algorithmus.
     */
    aktionKurseMitBipartiteMatchingVerteilen(): void;
    /**
     * Erzeugt pro Fachwahl ein Objekt des Typs
     * {@link KursblockungOutputFachwahlZuKurs} und fügt es dem Vector
     * {@code vFachwahlZuKurs} hinzu. Die GUI kann daraus die
     * Schüler-Zu-Kurs-Zuordnungen rekonstruiern.
     *
     * @param vFachwahlZuKurs Fügt diesem Vector pro Fachwahl ein Objekt des Typs
     *                        {@link KursblockungOutputFachwahlZuKurs} hinzu.
     */
    aktionOutputsErzeugen(vFachwahlZuKurs: Vector<KursblockungOutputFachwahlZuKurs>): void;
    /**
     * Liefert TRUE, falls der Schüler mindestens einen Multikurs hat. Ein Multikurs
     * ist ein Kurs, der über mehr als eine Schiene geht.
     *
     * @return TRUE, falls der Schüler mindestens einen Multikurs hat.
     */
    gibHatMultikurs(): boolean;
    private aktionKursHinzufuegen;
    private aktionKursEntfernen;
    isTranspiledInstanceOf(name: string): boolean;
}
export declare function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynSchueler(obj: unknown): KursblockungDynSchueler;
