/**
 * Offline-Hinweis und Warteschlange über der Kopfzeile.
 *
 * Entscheidung aus COMPANION_APP_ARCHITECTURE.md §3: Ohne Verbindung bleiben
 * die zuletzt geladenen Daten sichtbar, sind aber erkennbar nicht aktuell —
 * nie ein leerer Bildschirm und nie eine stille Veraltung.
 */

import type { Verbindungszustand, WartenderAuftrag } from "../api"
import type { Versionsstand } from "../daten/appVersion"
import { SymbolWarnung } from "../symbole"

export function Hinweisleiste({
  verbindung,
  warteschlange,
  versionsstand = "unbekannt",
}: {
  verbindung: Verbindungszustand
  warteschlange: readonly WartenderAuftrag[]
  /** Ob diese App noch dem Stand entspricht, den das Backend ausliefert.
      Siehe daten/appVersion.ts und VERSIONIERUNG.md. */
  versionsstand?: Versionsstand
}) {
  const offline = verbindung !== "verbunden"
  const wartend = warteschlange.length
  // Derselbe Grundsatz wie beim Offline-Hinweis oben: keine stille Veraltung.
  // Nur hier veraltet nicht die Anzeige, sondern die App selbst — sie trägt
  // ihre Dateien fest gebündelt und merkt eine neuere Fassung sonst nie.
  const veraltet = versionsstand === "abweichend"

  // "verbindet" gleich beim Start nicht als Offline melden — das würde bei
  // jedem App-Start kurz aufblitzen.
  if (!offline && wartend === 0 && !veraltet) return null
  if (verbindung === "verbindet" && wartend === 0 && !veraltet) return null

  const gescheitert = warteschlange.filter((a) => a.fehlversuche > 0).length

  return (
    <div className={offline ? "dm-hinweis dm-hinweis--offline" : "dm-hinweis"} role="status">
      <SymbolWarnung groesse={16} />
      <span>
        {offline
          ? verbindung === "nicht_angemeldet"
            ? "Nicht angemeldet — bitte Zugang prüfen."
            : "Offline — angezeigte Daten sind der letzte bekannte Stand."
          : null}
        {offline && wartend > 0 ? " " : null}
        {wartend > 0
          ? wartend === 1
            ? "Eine Änderung wartet auf Übertragung."
            : `${wartend} Änderungen warten auf Übertragung.`
          : null}
        {gescheitert > 0 ? ` ${gescheitert} davon mit Fehlversuchen.` : null}
        {veraltet && (offline || wartend > 0) ? " " : null}
        {veraltet ? "Diese App ist älter als der Server — bitte aktualisieren." : null}
      </span>
    </div>
  )
}
