import type { CapacitorConfig } from "@capacitor/cli"

/**
 * Capacitor-Konfiguration für die native Hülle.
 *
 * Nur Sideload, nie App Store: die Audi-Schrift und die Typenschilder sind
 * ausschließlich für diese eine private Installation freigegeben.
 *
 * Ablauf: `npm run build && npx cap sync`, dann `npx cap open ios` und in
 * Xcode signieren. Siehe `../UMSETZUNGSPLAN.md` Phase 10.
 */
const konfiguration: CapacitorConfig = {
  appId: "app.datametric360",
  appName: "DataMetric360",
  webDir: "dist",
  server: {
    // https, damit die App als sicherer Ursprung gilt — sonst verweigern
    // Browser-Bausteine wie die Zwischenablage ihren Dienst.
    androidScheme: "https",
    iosScheme: "https",
  },
  ios: {
    // Die App zeichnet bis unter die Statusleiste und hält den sicheren
    // Bereich selbst über env(safe-area-inset-*) frei.
    contentInset: "never",
    backgroundColor: "#161b23",
  },
  android: {
    backgroundColor: "#161b23",
  },
  plugins: {
    // Leitet fetch() über die native HTTP-Schicht statt über die WebView.
    //
    // Das ist hier nicht Feinschliff, sondern notwendig: Die native Hülle
    // liefert die Oberfläche unter einem eigenen Ursprung aus, jede Anfrage an
    // Home Assistant ist damit ursprungsübergreifend, und die WebView lehnt sie
    // ohne CORS-Freigabe ab. Nativ gestellte Anfragen kennen keine
    // CORS-Prüfung — die App braucht dadurch keinerlei CORS-Einstellung am
    // Server. Die WebSocket-Verbindung läuft unberührt weiter.
    CapacitorHttp: { enabled: true },

    // Oberflächen-Updates ohne Xcode (siehe src/daten/ota.ts und
    // ../VERSIONIERUNG.md). Das Bündel liegt in der Integration und wird
    // über Home Assistant ausgeliefert — keine fremde Cloud beteiligt.
    CapacitorUpdater: {
      // Kein Selbstlauf: die App lädt nur, wenn der Benutzer den Knopf in den
      // Einstellungen drückt. Ein Update, das ungefragt die Oberfläche
      // austauscht, während jemand gerade eine Fahrt einträgt, wäre die
      // schlechtere Sorte Hilfsbereitschaft.
      autoUpdate: false,

      // Kommt eine frisch signierte App über Xcode aufs Gerät, gilt wieder
      // deren eingebautes Bündel — sonst liefe ein älteres OTA-Bündel weiter
      // und überdeckte genau die native Änderung, für die Xcode nötig war.
      resetWhenUpdate: true,

      // Meldet sich die App nach einem Wechsel nicht binnen dieser Zeit als
      // startklar (notifyAppReady in src/main.tsx), kehrt das Plugin von
      // selbst zum vorherigen Bündel zurück. Das ist die Rückfallebene: ein
      // kaputtes Bündel kann das Gerät nicht dauerhaft lahmlegen. Bewusst
      // großzügiger als die 10 Sekunden Vorgabe — die Erstladung holt Profil,
      // Fahrten und Tankvorgänge, und ein langsames Netz darf nicht wie ein
      // defektes Bündel aussehen.
      appReadyTimeout: 20000,

      // Ein Bündel, das beim Start durchgefallen ist, wird nicht aufbewahrt.
      autoDeleteFailed: true,
    },
  },
}

export default konfiguration
