/**
 * Zuordnung Route → Seite. Eine Stelle, an der jede Seite eingetragen ist;
 * die Shell weiß nichts über Inhalte, die Seiten nichts über Navigation.
 */

import { useDaten } from "../daten/DatenKontext"
import type { Route, SeitenName } from "../navigation"
import { Batterie } from "./Batterie"
import { Einstellungen } from "./Einstellungen"
import { FahrtDetail } from "./FahrtDetail"
import { Fahrten } from "./Fahrten"
import { Fahrzeugdaten } from "./Fahrzeugdaten"
import { Fahrzeugstatus } from "./Fahrzeugstatus"
import { LiveFahrt } from "./LiveFahrt"
import { MeinAudi } from "./MeinAudi"
import { Reifen } from "./Reifen"
import { Service, Servicebuch, Werkstatt } from "./Service"
import { Statistik } from "./Statistik"
import { TankDetail } from "./TankDetail"
import { Tanken } from "./Tanken"
import { TuerenKlappen } from "./TuerenKlappen"
import { Uebersicht } from "./Uebersicht"
import {
  Beitrag,
  Notruf,
  Schutzbrief,
  Steuer,
  Versicherung,
  Vertrag,
  Vertragsdetails,
} from "./Versicherung"

export interface SeitenProps {
  route: Route
  geheZu: (name: SeitenName, id?: string) => void
  tabBeschriftung: boolean
  setzeTabBeschriftung: (an: boolean) => void
  beiAbmeldung: () => void
}

export function SeiteFuer(props: SeitenProps) {
  const daten = useDaten()

  // Erste Ladung: nichts anzeigen außer einem Hinweis. Ein leeres Gerüst wäre
  // schlimmer als ein ehrliches „lädt".
  if (!daten.bereit) {
    if (daten.ladefehler) {
      return (
        <div className="dm-leer">
          <div className="dm-leer__titel">Daten nicht erreichbar</div>
          <p className="dm-leer__text">{daten.ladefehler}</p>
        </div>
      )
    }
    return <div className="dm-laden">Daten werden geladen …</div>
  }

  const { route, geheZu, tabBeschriftung, setzeTabBeschriftung, beiAbmeldung } = props

  switch (route.name) {
    case "home":
      return <Uebersicht geheZu={geheZu} />
    case "sicherheit":
      return <Fahrzeugstatus geheZu={geheZu} />
    case "tuerenklappen":
      return <TuerenKlappen />
    case "audi":
      return <MeinAudi geheZu={geheZu} />
    case "ident":
      return <Fahrzeugdaten />
    case "battverlauf":
      return <Batterie />
    case "service":
      return <Service geheZu={geheZu} />
    case "werkstatt":
      return <Werkstatt />
    case "sbuch":
      return <Servicebuch />
    case "reifen":
      return <Reifen />
    case "vers":
      return <Versicherung geheZu={geheZu} />
    case "beitrag":
      return <Beitrag />
    case "vertrag":
      return <Vertrag />
    case "vertragsdetails":
      return <Vertragsdetails geheZu={geheZu} />
    case "schutz":
      return <Schutzbrief />
    case "notruf":
      return <Notruf />
    case "steuer":
      return <Steuer />
    case "trips":
      return <Fahrten geheZu={geheZu} />
    case "trip":
      return <FahrtDetail id={route.id} />
    case "fuel":
      return <Tanken geheZu={geheZu} />
    case "fill":
      return <TankDetail id={route.id} />
    case "stat":
      return <Statistik />
    case "live":
      return <LiveFahrt />
    case "einst":
      return (
        <Einstellungen
          tabBeschriftung={tabBeschriftung}
          setzeTabBeschriftung={setzeTabBeschriftung}
          beiAbmeldung={beiAbmeldung}
        />
      )
  }
}
