/**
 * Vergleich zwischen dem Stand, den diese App mitbringt, und dem, den das
 * Backend ausliefert. Hintergrund: ../../VERSIONIERUNG.md
 *
 * Warum es das braucht: Das Panel lädt seine Dateien bei jedem Seitenaufruf
 * frisch und kann gar nicht veralten. Die iOS-App trägt ihre Dateien fest
 * gebündelt und bleibt auf dem Stand vom Signieren — unbegrenzt und bisher
 * unbemerkt. Diese Datei macht daraus ein sichtbares Signal.
 *
 * Bewusst kein „größer/kleiner"-Vergleich: die Version ist eine Kennung
 * (`2026.8.23.2`), keine Zahl. Ein Sortierversuch wäre nur scheingenau und
 * würde bei einem Formatwechsel still falsche Antworten geben. Verglichen wird
 * auf Gleichheit — alles andere heißt „stimmt nicht überein", und was davon
 * älter ist, entscheidet der Mensch.
 */

export type Versionsstand =
  /** App und Backend melden denselben Stand. */
  | "gleich"
  /** Sie weichen ab — die App ist mit hoher Wahrscheinlichkeit älter. */
  | "abweichend"
  /** Kein Vergleich möglich (Backend meldet nichts, offline, altes Backend). */
  | "unbekannt"

export interface Versionsvergleich {
  stand: Versionsstand
  app: string | null
  server: string | null
}

/** Die in diese App einkompilierte Version (vite, siehe vite.config.ts). */
export function eigeneVersion(): string | null {
  // Der Zugriff ist abgesichert, weil die Konstante in Testläufen und im
  // Dev-Server nicht zwingend gesetzt ist. Fehlt sie, wird nicht verglichen,
  // statt eine Abweichung zu behaupten.
  return typeof __APP_VERSION__ === "string" && __APP_VERSION__ ? __APP_VERSION__ : null
}

export function versionVergleichen(
  app: string | null,
  server: string | null,
): Versionsvergleich {
  if (!app || !server) return { stand: "unbekannt", app, server }
  return { stand: app === server ? "gleich" : "abweichend", app, server }
}
