import { JavaObject } from '../../java/lang/JavaObject';
import { KursblockungInput } from '../../core/data/kursblockung/KursblockungInput';
import { KursblockungDynKurs } from '../../core/kursblockung/KursblockungDynKurs';
import { Logger } from '../../logger/Logger';
import { KursblockungDynStatistik } from '../../core/kursblockung/KursblockungDynStatistik';
import { KursblockungOutput } from '../../core/data/kursblockung/KursblockungOutput';
import { KursblockungDynSchueler } from '../../core/kursblockung/KursblockungDynSchueler';
export declare class KursblockungDynDaten extends JavaObject {
    private readonly logger;
    private readonly regelMap;
    private maxTimeMillis;
    private schienenArr;
    private kursArr;
    private kursArrFrei;
    private readonly kursMap;
    private fachartArr;
    private readonly fachartMap;
    private schuelerArr;
    private readonly schuelerMap;
    private readonly statistik;
    /**
     * Der Konstruktor der Klasse liest alle Daten von {@link KursblockungInput} ein
     * und baut die relevanten Datenstrukturen auf.
     *
     * @param pLogger Logger für Benutzerhinweise, Warnungen und Fehler.
     * @param pInput  Die Eingabedaten (Schnittstelle zur GUI).
     */
    constructor(pLogger: Logger, pInput: KursblockungInput);
    /**
     * Überprüft alle Referenzen in {@link KursblockungInput} und auch die
     * referentielle Integrität.
     *
     * @param pInput Das {@link KursblockungInput}-Objekt von der GUI.
     * @return {@code true}, falls kein Fehler gefunden wurde.
     */
    private schritt01FehlerBeiReferenzen;
    private schritt02FehlerBeiRegelGruppierung;
    private schritt03FehlerBeiFachartenErstellung;
    private schritt04FehlerBeiSchuelerErstellung;
    private schritt05FehlerBeiSchuelerFachwahlenErstellung;
    private schritt06FehlerBeiStatistikErstellung;
    private schritt07FehlerBeiSchienenErzeugung;
    private schritt08FehlerBeiKursErstellung;
    private schritt09FehlerBeiKursFreiErstellung;
    private schritt10FehlerBeiFachartKursArrayErstellung;
    /**
     * Leert die Datenstruktur und teilt dem Logger einen Fehler mit.
     *
     * @param fehlermeldung Die Fehlermeldung.
     */
    private fehler;
    /**
     * Liefert das Logger-Objekt für Benutzerhinweise, Warnungen und Fehler.
     *
     * @return Das Logger-Objekt für Benutzerhinweise, Warnungen und Fehler.
     */
    gibLogger(): Logger;
    /**
     * Liefert das Statistik-Objekt (für Anfragen zu Nichtwahlen, Kursdifferenzen,
     * etc.).
     *
     * @return Das Statistik-Objekt (für Anfragen zu Nichtwahlen, Kursdifferenzen,
     *         etc.).
     */
    gibStatistik(): KursblockungDynStatistik;
    /**
     * Liefert die maximale Blockungszeit in Millisekunden. Entweder handelt es sich
     * um einen Standardwert oder der Wert wurde im Konstruktor als Regel übergeben.
     *
     * @return Liefert die maximale Blockungszeit in Millisekunden.
     */
    gibBlockungszeitMillis(): number;
    /**
     * Liefert die maximal erlaubte Anzahl an Schienen. Entweder handelt es sich um
     * einen Standardwert oder der Wert wurde im Konstruktor als Regel übergeben.
     *
     * @return Liefert die maximal erlaubte Anzahl an Schienen.
     */
    gibSchienenAnzahl(): number;
    /**
     * Erzeugt ein Objekt {@link KursblockungOutput}. Dieses Objekt beinhaltet alle
     * Informationen aus denen die GUI die Kurs-Zu-Schiene und die
     * SuS-Zu-Kurs-Zuordnungen rekonstruieren kann.
     *
     * @return Das Blockungsergebnis für die GUI.
     */
    gibErzeugtesKursblockungOutput(): KursblockungOutput;
    /**
     * Liefert alle Kurse.
     *
     * @return Array aller Kurse.
     */
    gibKurseAlle(): Array<KursblockungDynKurs>;
    /**
     * Liefert alle Kurse deren Lage nicht komplett fixiert ist.
     *
     * @return Array aller Kurse, deren Schienenlage noch veränderbar ist.
     */
    gibKurseDieFreiSind(): Array<KursblockungDynKurs>;
    /**
     * Liefert die Anzahl alle Kurse deren Lage nicht komplett fixiert ist.
     *
     * @return Anzahl aller Kurse, deren Schienenlage noch veränderbar ist.
     */
    gibKurseDieFreiSindAnzahl(): number;
    /**
     * Liefert einen Long-Wert, der einer Bewertung der Fachwahlmatrix entspricht.
     * Je kleiner der Wert, desto besser ist die Bewertung.
     *
     * @return Long-Wert, der einer Bewertung der Fachwahlmatrix entspricht.
     */
    gibBewertungFachartPaar(): number;
    /**
     * Liefert ein Array aller Schülerinnen und Schüler. Falls der Parameter
     * {@code pNurMultiKurse} TRUE ist, dann werden nur SuS mit mindestens einem
     * Multikurs ausgewählt.
     *
     * @param pNurMultiKurse Falls TRUE, dann werden nur SuS mit mindestens einem
     *                       Multikurs ausgewählt.
     *
     * @return Ein Array aller Schülerinnen und Schüler.
     */
    gibSchuelerArray(pNurMultiKurse: boolean): Array<KursblockungDynSchueler>;
    /**
     * Entfernt alle SuS aus ihren Kursen.
     */
    aktionSchuelerAusAllenKursenEntfernen(): void;
    /**
     * Debug Ausgaben. Nur für Testzwecke.
     */
    debug(): void;
    /**
     * Speichert die Bewertung, die Kursverteilung und die Schülerverteilung im
     * Zustand S.
     */
    aktionZustandSpeichernS(): void;
    /**
     * Speichert die Bewertung, die Kursverteilung und die Schülerverteilung im
     * Zustand K.
     */
    aktionZustandSpeichernK(): void;
    /**
     * Lädt den zuvor gespeicherten Zustand S (Kursverteilung und
     * Schülerverteilung).
     */
    aktionZustandLadenS(): void;
    /**
     * Lädt den zuvor gespeicherten Zustand Z (Kursverteilung und
     * Schülerverteilung).
     */
    aktionZustandLadenK(): void;
    /**
     * Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     * Kursdiffenzen) des Zustandes S sich verschlechtert (-1), sich verbessert (+1)
     * hat oder gleichgeblieben (0) ist.
     *
     * @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     *         Kursdiffenzen) des Zustandes S sich verschlechtert (-1), sich
     *         verbessert (+1) hat oder gleichgeblieben (0) ist.
     */
    gibBewertungJetztBesserAlsS(): number;
    /**
     * Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     * Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich verbessert (+1)
     * hat oder gleichgeblieben (0) ist.
     *
     * @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     *         Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich
     *         verbessert (+1) hat oder gleichgeblieben (0) ist.
     */
    gibBewertungJetztBesserAlsK(): number;
    /**
     * Verteilte alle Kurse auf ihre Schienen zufällig. Kurse die keinen
     * Freiheitsgrad haben, werden dabei ignoriert.
     */
    aktionKurseFreieZufaelligVerteilen(): void;
    /**
     * Verteilt einen Kurs zufällig. Kurse die keinen Freiheitsgrad haben, werden
     * dabei ignoriert.
     */
    aktionKursFreienEinenZufaelligVerteilen(): void;
    /**
     * Liefert den Wert {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     * Kursdiffenzen) des Zustandes S sich verschlechtert (-1), sich verbessert (+1)
     * hat oder gleichgeblieben (0) ist.
     *
     * @return {@code -1, 0 oder +1}, falls die Bewertung (Nichtwahlen,
     *         Kursdiffenzen) des Zustandes K sich verschlechtert (-1), sich
     *         verbessert (+1) hat oder gleichgeblieben (0) ist.
     */
    gibBewertung_NW_KD_JetztS(): number;
    isTranspiledInstanceOf(name: string): boolean;
}
export declare function cast_de_nrw_schule_svws_core_kursblockung_KursblockungDynDaten(obj: unknown): KursblockungDynDaten;
