/**
 * „Fahrt läuft gerade" — Live-Ansicht mit Karte, Geschwindigkeit, bisheriger
 * Strecke und Dauer.
 *
 * Steht bereit, ist aber **abgeschaltet**: Die Daten dafür (Zündung, Position,
 * Geschwindigkeit) liefert erst der FMM003, und der ist noch nicht verbaut
 * (COMPANION_APP_ARCHITECTURE.md §2b, Phase 13 des Umsetzungsplans). Der
 * Schalter liegt in `funktionen.ts` — umlegen, sobald echte Werte fließen,
 * nicht vorher: bis dahin gäbe es nichts anzuzeigen außer Nullen.
 */

import { Fig, Tile } from "@audi-dash/ui"

import { useDaten } from "../daten/DatenKontext"
import { dauer, de, deOderStrich } from "../format"
import { Leerzustand, Wertzeile, Werteliste } from "./bausteine"
import { Karte } from "./Karte"

export interface LiveZustand {
  faehrt: boolean
  geschwindigkeit?: number | null
  position?: { lat: number; lon: number } | null
  streckeKm?: number | null
  dauerS?: number | null
}

/** Liest die Live-Werte aus dem aufbereiteten Fahrzeug-Objekt.

    Bis 2026-08-23 las diese Funktion `lat`/`lon`/`zuendung` roh aus dem
    Status-Blob — Feldnamen, die es dort nie gab: das Backend veröffentlicht
    `standort_lat`/`standort_lon`, und `zuendung` gab es überhaupt noch nicht.
    Beides kam nie an, die Live-Ansicht meldete deshalb dauerhaft „Das
    Fahrzeug steht" und zeigte nie eine Position. Jetzt über die benannten
    Felder aus profilAdapter, die der Typ `Fahrzeugstatus` absichert. */
export function liveZustandLesen(status: Record<string, unknown>): LiveZustand {
  const lat = typeof status["standortLat"] === "number" ? status["standortLat"] : null
  const lon = typeof status["standortLon"] === "number" ? status["standortLon"] : null
  return {
    faehrt: status["zuendung"] === true,
    geschwindigkeit: typeof status["geschwindigkeit"] === "number" ? status["geschwindigkeit"] : null,
    position: lat != null && lon != null ? { lat, lon } : null,
    streckeKm: typeof status["fahrt_strecke_km"] === "number" ? status["fahrt_strecke_km"] : null,
    dauerS: typeof status["fahrt_dauer_s"] === "number" ? status["fahrt_dauer_s"] : null,
  }
}

export function LiveFahrt() {
  const { fahrzeug } = useDaten()
  if (!fahrzeug) return null

  const live = liveZustandLesen(fahrzeug as unknown as Record<string, unknown>)

  if (!live.faehrt) {
    return (
      <Leerzustand
        titel="Das Fahrzeug steht"
        text="Sobald die Zündung an ist, siehst du hier die laufende Fahrt mit Position, Geschwindigkeit, Strecke und Dauer."
      />
    )
  }

  return (
    <>
      <Tile>
        <span className="ads-eyebrow">Geschwindigkeit</span>
        <Fig value={deOderStrich(live.geschwindigkeit)} unit="km/h" size={56} />
        <Werteliste
          kinder={
            <>
              <Wertzeile
                label="Bisher gefahren"
                wert={live.streckeKm != null ? `${de(live.streckeKm, 1)} km` : "—"}
              />
              <Wertzeile label="Unterwegs seit" wert={dauer(live.dauerS)} />
            </>
          }
        />
      </Tile>

      <Tile>
        <span className="ads-eyebrow">Position</span>
        {live.position ? (
          <Karte start={live.position} />
        ) : (
          <Leerzustand
            titel="Keine Position"
            text="Das Fahrzeug meldet gerade keine Koordinaten."
          />
        )}
      </Tile>
    </>
  )
}
