# BeoAnswer React App

Eine React-Anwendung zur Nachbearbeitung von Sonderführungen mit Backend-Integration.

## 📋 Features

- **Interaktive Formulare** für Führungsnachbearbeitung
- **Backend-Integration** mit PHP über FormData
- **HTTP Basic Authentication** Support
- **Professionelle Modal-Dialoge** anstatt Browser-Alerts
- **Intelligente Navigation** mit Zurück-Button
- **Automatisches Fenster schließen** nach Aktionen
- **Environment-Variable Konfiguration**
- **Responsive Design**

## 🚀 Quick Start

### Voraussetzungen

- Node.js (v16 oder höher)
- npm oder yarn

### Installation

```bash
# Repository klonen
git clone <repository-url>
cd beoanswer_react

# Dependencies installieren
npm install

# Terser für Production Builds installieren
npm install --save-dev terser

# Environment-Datei erstellen
cp .env.example .env
```

### Konfiguration

Erstelle eine `.env` Datei und passe die Werte an:

```env
# Backend API Configuration
VITE_API_URL=/api/intern/sofue/php/sofueDB.php

# HTTP Basic Authentication für geschütztes Backend
VITE_API_USERNAME=dein_username
VITE_API_PASSWORD=dein_passwort
```

### Development

```bash
# Development Server starten
npm run dev

# App öffnet sich auf http://localhost:5173
# Mit URL-Parameter: http://localhost:5173/?id=123
```

### Production

```bash
# Production Build erstellen
npm run build:prod

# Production Preview
npm run preview:prod

# Build-Dateien befinden sich in ./dist/
```

## 📦 Versionsverwaltung

Die App zeigt automatisch die Version aus der `package.json` und das aktuelle Build-Datum an.

### Version erhöhen

```bash
# Patch-Version erhöhen (1.0.0 → 1.0.1)
npm version patch

# Minor-Version erhöhen (1.0.0 → 1.1.0)
npm version minor

# Major-Version erhöhen (1.0.0 → 2.0.0)
npm version major
```

### Manuell in package.json

```json
{
  "version": "1.2.3"
}
```

**Wichtig:** Nach Versionänderungen den Development Server neu starten:
```bash
npm run dev
```

## 🛠 Scripts

```bash
npm run dev          # Development Server
npm run build        # Standard Build
npm run build:prod   # Production Build
npm run preview      # Preview des Builds
npm run preview:prod # Preview des Production Builds
npm run lint         # Code Linting
```

## 🌐 Deployment

### 1. Environment Variables setzen

Für Production eine `.env.production` erstellen:

```env
VITE_API_URL=https://dein-server.com/intern/sofue/php/sofueDB.php
VITE_API_USERNAME=production_user
VITE_API_PASSWORD=production_password
```

### 2. Build erstellen

```bash
npm run build:prod
```

### 3. Dateien auf Server kopieren

```bash
# Beispiel mit rsync
rsync -avz dist/ user@server:/var/www/html/beoanswer/

# Oder mit scp
scp -r dist/* user@server:/var/www/html/beoanswer/
```

### 4. Webserver konfigurieren

Siehe [DEPLOYMENT.md](./DEPLOYMENT.md) für detaillierte Anweisungen.

## 📱 Verwendung

### URL-Parameter

Die App erwartet einen `id` URL-Parameter:

```
https://dein-server.com/beoanswer/?id=123
```

### Workflow

1. **Link aus E-Mail** öffnen
2. **Formular ausfüllen**:
   - Ja/Nein ob Führung stattfand
   - Bei "Ja": Besucherzahl, Spenden-Art, etc.
   - Bei "Nein": Absage oder Verschiebung
3. **Daten speichern** - Fenster schließt automatisch

### Navigation

- **Zurück-Button**: Schrittweise Navigation rückwärts
- **Abbruch**: Bestätigung mit Modal, dann Fenster schließen
- **Anleitung**: Hilfe-Modal mit Workflow-Beschreibung

## 🔧 Entwicklung

### Projektstruktur

```
src/
├── App.jsx              # Hauptkomponente mit Routing-Logik
├── FormContext.jsx      # Globaler State für Formulardaten
├── main.jsx            # React App Entry Point
├── App.css             # Haupt-Styling
├── components/
│   ├── BesucherBar.jsx     # Eingabe für Besucher/Betrag
│   ├── Bemerkungen.jsx     # Textarea für Bemerkungen
│   ├── FandStattVer.jsx    # Radio-Button Komponente
│   ├── LastButtons.jsx     # Abbruch/Anleitung/Senden Buttons
│   ├── LastLine.jsx        # Version/Datum Anzeige
│   ├── Modal.jsx           # Standard Modal Dialog
│   ├── ConfirmModal.jsx    # Bestätigungs Modal
│   ├── Spende.jsx          # Spenden-Art Auswahl
│   └── Verschoben.jsx      # Datum-Eingabe für Verschiebung
```

### FormContext

Zentrale State-Verwaltung für alle Formulardaten:

```javascript
const { formData, updateFormData, resetFormData } = useFormData()

// Daten setzen
updateFormData('besucher', '15')

// Daten lesen
console.log(formData.besucher)

// Formular zurücksetzen
resetFormData()
```

### Backend Integration

Die App sendet Daten via FormData an das PHP Backend:

```javascript
const backendData = new FormData()
backendData.append('cmd', 'UPDATEAFTER')
backendData.append('id', id)
backendData.append('besucher', formData.besucher)
// ...weitere Felder
```

## 🐛 Troubleshooting

### Build-Fehler: "terser not found"

```bash
npm install --save-dev terser
```

### CORS-Fehler im Development

Vite Proxy ist konfiguriert für `localhost:8080`. Anpassen in `vite.config.js`:

```javascript
proxy: {
  '/api': 'http://localhost:8080'
}
```

### Environment Variables werden nicht geladen

1. Development Server neu starten
2. Variablen müssen mit `VITE_` beginnen
3. `.env` Datei im Projektroot erstellen

### Modal-Buttons haben keinen Abstand

Browser-Cache leeren oder Hard-Refresh (`Ctrl+F5`).

## 📄 Weitere Dokumentation

- [DEPLOYMENT.md](./DEPLOYMENT.md) - Detaillierte Deployment-Anweisungen
- [.env.example](./.env.example) - Environment Variable Template

## 🤝 Beitragen

1. Feature Branch erstellen
2. Änderungen committen
3. Version mit `npm version` erhöhen
4. Build testen: `npm run build:prod`
5. Pull Request erstellen

## 📝 Lizenz

Private Projekt - Alle Rechte vorbehalten.

---

**Version:** Automatisch aus package.json  
**Build-Datum:** Automatisch generiert  
**Letztes Update:** Oktober 2025
