/**
 * Oberflächen-eigene Typen der Prüfungssimulation.
 *
 * Der verbindliche Vertrag steht in `src/shared/pruefung.ts`. Hier stehen nur
 * Begriffe, die ausschließlich die Darstellung betreffen – etwa wie eine Frage
 * des Bogens aufbereitet wird oder welche Werte die Auswahlansicht hält.
 */

import type { Antwortoption, Frage } from '../../../shared/katalog';
import type {
  OffenerLauf,
  Pruefungsauftrag,
  Pruefungsergebnis,
  Zeitmodus,
} from '../../../shared/pruefung';

/** Eine Frage des Prüfungsbogens, fertig für die Anzeige. */
export interface Bogenfrage {
  readonly frage: Frage;
  /** Optionen in der vorgegebenen Anzeigereihenfolge. */
  readonly optionen: readonly Antwortoption[];
  readonly mehrfach: boolean;
  /** Wird angekreuzt (Multiple Choice) statt ausformuliert. */
  readonly auswahlfrage: boolean;
}

/**
 * Ein konkreter Simulationslauf.
 *
 * Die `id` ist je Start eindeutig und dient als React-Schlüssel, damit ein
 * neuer Lauf garantiert frisch aufsetzt und keine Reste des vorigen behält.
 */
export interface Pruefungslauf {
  readonly id: number;
  readonly auftrag: Pruefungsauftrag;
  /**
   * Ein unterbrochener Lauf, der fortgesetzt wird – sonst `null`.
   *
   * Bogen, Eingaben, Position und verbrauchte Zeit kommen dann von dort
   * statt aus einem neuen Zug.
   */
  readonly fortsetzung?: OffenerLauf | null;
}

/** Abgeschlossener Lauf samt Hinweis darauf, wie ausgewertet wurde. */
export interface Pruefungsabschluss {
  readonly ergebnis: Pruefungsergebnis;
  readonly profilName: string;
  readonly auftrag: Pruefungsauftrag;
  /** Erklärt, wenn ohne Anwendungskern gerechnet wurde; sonst `null`. */
  readonly hinweis: string | null;
}

/** Werte der Auswahlansicht, bevor daraus ein {@link Pruefungsauftrag} wird. */
export interface Pruefungseinstellung {
  readonly profilId: string;
  readonly zeitmodus: Zeitmodus;
  /** Nur bei anpassbaren Profilen wirksam. */
  readonly fragenAnzahl: number;
  readonly zeitMinuten: number;
  readonly bestehensProzent: number;
  /** Anteil offener Fragen in Prozent. Nur bei anpassbaren Profilen wirksam. */
  readonly anteilOffenProzent: number;
  readonly kapitelIVEinbeziehen: boolean;
}
