# Plan: Fahrzeit + Kilometer + Tagesroute (iOS · Heute-Ansicht)

> Nur ein Plan — gebaut wird erst nach deinem „Bauen". Stand: 06.08.2026.

## Was entsteht
1. **Etappen-Zeile** (textlich, ohne Icons): Distanz + Fahrzeit zwischen aufeinanderfolgenden Terminen — inkl. **Anfahrt** (aktueller Standort → 1. Termin).
2. **Tagessumme direkt hinter der Überschrift „Heutige Besuche"** (km · Zeit).
3. **Kartenausschnitt unter dem Donut**: alle heutigen Stops + Route. **Tap → gesamte Route mit allen Stationen in Apple Maps.**

## Verkehr (dein wichtiger Punkt)
- Fahrzeiten **verkehrsabhängig**: `MKDirections` mit `departureDate = jetzt` → `expectedTravelTime` rechnet den **aktuellen Verkehr** mit ein. Bei Stau steigt die Zeit; die Distanz bleibt gleich.
- **Ehrlich dazu:** Echter Live-Stau wirkt v. a. für „Abfahrt jetzt" (erste Etappe). Für spätere Termine am Tag nutzt MapKit seine **Verkehrsprognose** (typischer/erwarteter Verkehr zur jeweiligen Uhrzeit) — einen konkreten Stau in 3 Stunden kann niemand exakt vorhersagen.

## Deine Entscheidungen
| Punkt | Entscheidung |
|---|---|
| Etappen-UI | Zwischenzeile, textlich, **ohne Icons** |
| Geltung | **nur Heute** |
| Anfahrt | **inklusive** (Standort → 1. Termin) |
| Reihenfolge | **nach Uhrzeit** sortiert |

## UI-Skizze (Heute)
```
Heute · Mittwoch, 06. August 2026
┌───────────────────────────────────────────────┐
│  ◐ Donut  ·  Freigegeben / Entwurf / Anstehend │
└───────────────────────────────────────────────┘
┌───────────────────────────────────────────────┐
│  🗺  Kartenausschnitt: alle Stops + Route       │   ← Tap: ganze Route in Apple Maps
└───────────────────────────────────────────────┘
Heutige Besuche          47 km · 1 Std 12 Min       ← Gesamt hinter der Überschrift

     Anfahrt · 8 km · 14 Min
09:30  Bauzentrum Nord GmbH
       Industriestraße 14 · 28195 Bremen
     12 km · 18 Min
14:30  Bauzentrum West GmbH
       Weserstraße 88 · 28197 Bremen
```
*(Werte sind Beispiele. Kartenausschnitt selbst hat kein Icon — hier nur zur Kennzeichnung.)*

## Technik
- **`MKDirections.calculate` je Etappe** mit `departureDate = Date()` → liefert in einem Rutsch: `distance` (m), `expectedTravelTime` (s, verkehrsabhängig) **und** `polyline` (für die Karte).
- **Anfahrt**: `MKMapItem.forCurrentLocation()` → 1. Termin (CoreLocation, When-in-Use).
- **Karte** (unter dem Donut): MapKit `Map` mit Stop-Annotationen + Etappen-Polylines. Auto-Zoom auf alle Stops.
- **Apple Maps öffnen**: `MKMapItem.openMaps(with: [aktuellerStandort, stop₁, stop₂, …], launchOptions: .automobile)` → durchgehende Fahrroute über alle Stationen.
- **Cache** je Koordinatenpaar (from→to) im ViewModel — Neuberechnung nur bei Änderung der Besuche.
- **Offline-/Fehler-Fallback**: schlägt MKDirections fehl (kein Netz / Apple-Throttling) → Luftlinie via `CLLocation.distance` als „≈ X km" (ohne Zeit, ohne Route).
- **Fehlende Geokoordinate** → Etappe wird übersprungen (kein Absturz).

## Zu beachten
- **Standort-Berechtigung**: `NSLocationWhenInUseUsageDescription` in `project.yml` + Runtime-Dialog. Abgelehnt → Anfahrt und „von hier"-Route entfallen, der Rest läuft normal.
- **Simulator**: GPS ist simuliert (Default oft Cupertino) → Anfahrt Cupertino→Bremen wäre unrealistisch. Custom Location nahe Bremen setzen (Features → Location) oder am echten Gerät testen.
- **Throttling** bei vielen Etappen → Cache + Etappen sequenziell/mit kleiner Drossel berechnen.

## Umsetzung (nach deinem Go)
1. **RouteService** — MKDirections (verkehrsabhängig) + Polyline + Cache + Offline-Fallback + CoreLocation. Unit-Test gegen Stub.
2. **ViewModel** — Heute-Besuche nach Uhrzeit sortieren; Etappen, Tagessumme, Route (Stops + Polylines) bereitstellen. Nur Heute.
3. **UI** — Etappen-Zwischenzeile + Gesamt hinter „Heutige Besuche" + Kartenausschnitt unter dem Donut (Tap → Apple Maps).
4. **Build** — kompilieren; die **visuelle Prüfung machst du**.

## Status
Plan aktualisiert (Live-Verkehr, Gesamt hinter „Heutige Besuche", Karten-Route). **Warte auf dein „Bauen".**
