/**
 * Flacher Navigationszustand — kein Router-Paket.
 *
 * Übernommen aus dem alten HA-Panel (`route` + `ZURUECK`): Die App hat keinen
 * Verlaufsstapel, sondern genau eine aktuelle Seite und eine feste Tabelle,
 * welche Seite der Zurück-Pfeil ansteuert. Das ist bewusst so geblieben —
 * die Verschachtelung ist flach genug (höchstens drei Ebenen), und ein Router
 * würde nur Gewicht ohne Nutzen bringen.
 */

export const HAUPTBEREICHE = ["home", "audi", "trips", "stat", "fuel"] as const

export type Hauptbereich = (typeof HAUPTBEREICHE)[number]

export type SeitenName =
  | Hauptbereich
  // Unterseiten von "Mein Audi"
  | "ident"
  | "battverlauf"
  | "service"
  | "werkstatt"
  | "sbuch"
  | "reifen"
  | "vers"
  | "beitrag"
  | "vertrag"
  | "vertragsdetails"
  | "schutz"
  | "notruf"
  | "steuer"
  // Detailseiten der Listen
  | "trip"
  | "fill"
  // Sonstige
  | "sicherheit"
  | "tuerenklappen"
  | "live"
  | "einst"

export interface Route {
  name: SeitenName
  /** Datensatz-Kennung bei Detailseiten (Fahrt, Tankvorgang, Servicebuch). */
  id?: string
}

/**
 * Ziel des Zurück-Pfeils je Unterseite. Seiten, die hier fehlen, sind
 * Hauptbereiche und zeigen keinen Zurück-Pfeil.
 */
export const ZURUECK: Partial<Record<SeitenName, SeitenName>> = {
  trip: "trips",
  fill: "fuel",
  service: "audi",
  reifen: "audi",
  ident: "audi",
  battverlauf: "audi",
  vers: "audi",
  beitrag: "vers",
  vertrag: "vers",
  vertragsdetails: "vers",
  schutz: "vertragsdetails",
  steuer: "vers",
  notruf: "vers",
  werkstatt: "service",
  sbuch: "service",
  einst: "home",
  sicherheit: "home",
  tuerenklappen: "sicherheit",
  live: "home",
}

/** Überschrift je Seite. Leer bedeutet: die Seite bringt ihre eigene mit. */
export const TITEL: Record<SeitenName, string> = {
  home: "Übersicht",
  audi: "Mein Audi",
  trips: "Fahrten",
  stat: "Statistik",
  fuel: "Tanken",
  ident: "Fahrzeugdaten",
  battverlauf: "Batterie",
  service: "Service",
  werkstatt: "Werkstatt",
  sbuch: "Servicebuch",
  reifen: "Reifen",
  vers: "Versicherung & Steuer",
  beitrag: "Beitrag",
  vertrag: "Vertrag",
  vertragsdetails: "Vertragsdetails",
  schutz: "Schutzbrief",
  notruf: "Notruf",
  steuer: "Kfz-Steuer",
  trip: "Fahrt",
  fill: "Tankvorgang",
  sicherheit: "Fahrzeugstatus",
  tuerenklappen: "Türen und Klappen",
  live: "Fahrt läuft",
  einst: "Einstellungen",
}

export function istHauptbereich(name: SeitenName): name is Hauptbereich {
  return (HAUPTBEREICHE as readonly string[]).includes(name)
}

/**
 * Der Hauptbereich, zu dem eine Seite gehört — bestimmt, welcher Eintrag in
 * Tab-Leiste bzw. Seitenleiste hervorgehoben wird. Folgt der ZURUECK-Kette
 * nach oben.
 */
export function bereichVon(name: SeitenName): Hauptbereich {
  let aktuell: SeitenName = name
  for (let tiefe = 0; tiefe < 5; tiefe++) {
    if (istHauptbereich(aktuell)) return aktuell
    const eltern = ZURUECK[aktuell]
    if (!eltern) return "home"
    aktuell = eltern
  }
  return "home"
}
