# TravelDesk – Reiseplanung für Firmenmonteure

Ein intelligenter **Deep-Link-Generator**: Das Tool bereitet Flug-, Hotel- und Mietwagensuchen vor und leitet direkt zu Booking.com weiter. Keine eigene Buchung, kein eigenes Inventar – volles Booking.com Angebot, vertraute Oberfläche.

## Wie es funktioniert

1. Nutzer gibt Reisedaten + Fabrikadresse ein
2. Tool ermittelt IATA-Codes (Lookup-Tabelle + KI-Fallback)
3. Tool geocoded die Adressen (Google Maps oder Nominatim)
4. Optionaler Mietwagen-Check: Hotel-Adresse → Distanz zur Fabrik berechnen
5. Tool generiert 3 Booking.com Deep-Links:
   - **flights.booking.com** – mit Flughafen-Codes vorausgefüllt
   - **booking.com/searchresults** – mit Ort, Datum, Personen
   - **booking.com/cars** – mit Abholort und Datum
6. KI (GPT-4o-mini) erstellt kurze Reiseempfehlung

## Voraussetzungen

- **Node.js** (Version 18+) → https://nodejs.org
- API-Keys: Google Maps + OpenAI

## Setup

### 1. Abhängigkeiten installieren

```bash
cd c:\Users\Timo\Documents\Reiseplanung
npm install
```

### 2. .env Datei anlegen

```bash
copy .env.example .env
```

Dann in `.env` eintragen:

```env
GOOGLE_MAPS_API_KEY=dein_key
OPENAI_API_KEY=dein_key
PORT=3000
```

### 3. Server starten

```bash
npm start
```

→ Öffne **http://localhost:3000**

## API-Keys

### Google Maps (optional, aber empfohlen)
- https://console.cloud.google.com → APIs aktivieren:
  - **Geocoding API** (Adresse → Koordinaten)
  - **Distance Matrix API** (Mietwagen-Check)
- Ohne Google Maps: Nominatim (OpenStreetMap) als Fallback – kostenlos, kein Key nötig

### OpenAI
- https://platform.openai.com → API Keys
- Verwendung: IATA-Code-Fallback (GPT-4o-mini) + KI-Zusammenfassung

## API-Endpoints

### POST /api/search
Generiert alle Deep-Links für eine Reise.

**Request:**
```json
{
  "origin": "Stuttgart, Deutschland",
  "destination": "ul. Marszałkowska 1, Warschau, Polen",
  "checkin": "2026-04-15",
  "checkout": "2026-04-20",
  "adults": 1,
  "directFlightsOnly": false,
  "refundableOnly": true,
  "hotelAddress": "ul. Nowogrodzka 35, Warschau",
  "specialRequirements": "Parkplatz"
}
```

**Response:**
```json
{
  "flightLink": "https://flights.booking.com/...",
  "hotelLink": "https://www.booking.com/searchresults...",
  "carLink": "https://www.booking.com/cars/...",
  "originIATA": "STR",
  "destIATA": "WAW",
  "carNeeded": true,
  "carMessage": "🚗 Mietwagen empfohlen – 2.3 km zur Fabrik",
  "distanceMeters": 2300,
  "summary": "KI-Empfehlung...",
  "meta": { ... }
}
```

### POST /api/check-distance
Prüft nachträglich ob ein Mietwagen nötig ist.

**Request:**
```json
{
  "hotelAddress": "ul. Nowogrodzka 35, Warschau",
  "fabrikAddress": "ul. Marszałkowska 1, Warschau, Polen",
  "checkin": "2026-04-15",
  "checkout": "2026-04-20"
}
```

**Response:**
```json
{
  "distanceMeters": 800,
  "carNeeded": false,
  "carMessage": "✅ Kein Mietwagen nötig – 800m",
  "carLink": "https://www.booking.com/cars/..."
}
```

## IATA-Lookup

Das Tool enthält eine Tabelle mit 150+ Städten (Europa, Asien, Amerika, Afrika, Ozeanien).

Falls eine Stadt nicht in der Tabelle ist, fragt das Tool automatisch GPT-4o-mini nach dem IATA-Code. Falls auch das scheitert, wird ein Hinweis angezeigt und der Booking.com Flights Link öffnet ohne Vorausfüllung.

## Mietwagen-Logik

| Szenario | Ergebnis |
|---|---|
| Hotel-Adresse angegeben, < 1,5 km zur Fabrik | Kein Mietwagen nötig |
| Hotel-Adresse angegeben, ≥ 1,5 km zur Fabrik | Mietwagen empfohlen |
| Keine Hotel-Adresse | Unbekannt – inline Distanz-Check möglich |

## Entwicklungs-Modus

```bash
npm run dev
```

(nodemon mit Auto-Reload)
