# Event Center Email Template System

## Übersicht

Das Event Center nutzt jetzt ein Template-System für E-Mails, genau wie das normale Buchungssystem. E-Mails werden asynchron über Symfony Messenger versendet.

---

## Template-Typen

### 1. Buchungsbestätigung (`event_center_confirmation`)
- **Zweck:** E-Mail an Kunden nach erfolgreicher Buchung
- **Empfänger:** Eltern (Erziehungsberechtigte)
- **Versand:** Automatisch nach Buchung (asynchron)

---

## Verfügbare Platzhalter

### Buchungsinformationen:
- `{buchungs_token}` - Eindeutige Buchungsnummer (z.B. `a1b2c3d4-...`)
- `{paket_name}` - Name des Event-Pakets (z.B. "Kindergeburtstag 6-8 Jahre")
- `{dauer}` - Dauer in Minuten (z.B. "90 Minuten")
- `{datum}` - Buchungsdatum (z.B. "15.12.2025")
- `{start_zeit}` - Startzeit (z.B. "14:00")
- `{end_zeit}` - Endzeit (z.B. "15:30")
- `{preis}` - Gesamtpreis (z.B. "89,00 €")
- `{status}` - Status der Buchung (z.B. "Unter Vorbehalt", "Gebucht")

### Kundendaten (Erziehungsberechtigte):
- `{eltern_name}` - Vollständiger Name (z.B. "Mustermann, Max")
- `{eltern_vorname}` - Vorname (z.B. "Max")
- `{eltern_nachname}` - Nachname (z.B. "Mustermann")
- `{eltern_email}` - E-Mail-Adresse
- `{eltern_telefon}` - Telefonnummer

### Geburtstagskind:
- `{kind_name}` - Vollständiger Name (z.B. "Mustermann, Anna")
- `{kind_vorname}` - Vorname (z.B. "Anna")
- `{kind_nachname}` - Nachname (z.B. "Mustermann")
- `{kind_alter}` - Alter des Geburtstagskindes (z.B. "7")

### Weitere Informationen:
- `{anzahl_kinder}` - Gesamtzahl der Kinder (z.B. "8")
- `{anmerkungen}` - Besondere Wünsche/Anmerkungen oder "Keine Anmerkungen"
- `{erstellt_am}` - Erstellungsdatum (z.B. "04.12.2025 13:45")
- `{admin_email}` - Kontakt-E-Mail (z.B. "buchung@ksb-dueren.de")

---

## Template im Admin-Panel erstellen

### 1. Navigation:
```
Admin-Panel → BewegungsZentrum → E-Mail Templates
URL: /ksbdueren/public/admin/event-center/email-templates
```

**Oder direkt:**
```
https://dp-smartsolutions.de/ksbdueren/public/admin/event-center/email-templates
```

### 2. Template-Konfiguration:

**Name:** `Event Center Buchungsbestätigung`

**Typ:** `Event Center - Buchungsbestätigung` (aus Dropdown wählen)

**Betreff:**
```
Ihre Buchung im BewegungsZentrum - {buchungs_token}
```

**Inhalt (Beispiel):**
```html
<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
        .content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
        .info-box { background: white; padding: 20px; margin: 20px 0; border-left: 4px solid #667eea; border-radius: 5px; }
        .info-row { margin: 10px 0; }
        .label { font-weight: bold; color: #667eea; }
        .footer { text-align: center; color: #666; font-size: 12px; margin-top: 30px; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>🎉 Buchung bestätigt!</h1>
            <p>Vielen Dank für Ihre Buchung im BewegungsZentrum</p>
        </div>
        
        <div class="content">
            <p>Liebe/r {eltern_vorname} {eltern_nachname},</p>
            
            <p>vielen Dank für Ihre Buchung! Wir freuen uns, den Geburtstag von <strong>{kind_vorname}</strong> zu einem unvergesslichen Erlebnis zu machen.</p>

            <div class="info-box">
                <h2>📋 Ihre Buchungsdetails</h2>
                <div class="info-row">
                    <span class="label">Buchungs-Token:</span> {buchungs_token}
                </div>
                <div class="info-row">
                    <span class="label">Paket:</span> {paket_name}
                </div>
                <div class="info-row">
                    <span class="label">Dauer:</span> {dauer}
                </div>
                <div class="info-row">
                    <span class="label">Datum:</span> {datum}
                </div>
                <div class="info-row">
                    <span class="label">Uhrzeit:</span> {start_zeit} - {end_zeit} Uhr
                </div>
                <div class="info-row">
                    <span class="label">Gesamtpreis:</span> <strong>{preis}</strong>
                </div>
            </div>

            <div class="info-box">
                <h2>ℹ️ Wichtige Hinweise</h2>
                <ul>
                    <li>Bitte erscheinen Sie <strong>15 Minuten vor Beginn</strong></li>
                    <li>Sportkleidung und Hallenschuhe nicht vergessen</li>
                    <li>Anzahl der Kinder: {anzahl_kinder}</li>
                    <li>Geburtstagskind: {kind_name} ({kind_alter} Jahre)</li>
                </ul>
            </div>

            <p><strong>Anmerkungen:</strong> {anmerkungen}</p>

            <p>Wir freuen uns auf Sie und die Kinder!</p>

            <p>Mit sportlichen Grüßen<br>
            Ihr BewegungsZentrum-Team</p>
        </div>

        <div class="footer">
            <p><strong>Kreissportbund Düren e.V.</strong><br>
            BewegungsZentrum<br>
            E-Mail: {admin_email}</p>
        </div>
    </div>
</body>
</html>
```

**Aktiv:** ✓ Ja

---

## Messenger Queue verarbeiten

### Manuell (für Tests):
```bash
php bin/console messenger:consume async -vv
```

### Automatisch (Supervisor oder Systemd):

**Supervisor Konfiguration** (`/etc/supervisor/conf.d/messenger-worker.conf`):
```ini
[program:messenger-consume]
command=php /var/www/html/ksbdueren/bin/console messenger:consume async --time-limit=3600
user=www-data
numprocs=2
startsecs=0
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
```

Nach Konfiguration:
```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start messenger-consume:*
```

---

## Cronjob (Alternative zu Supervisor)

In `crontab -e`:
```bash
# Messenger Queue verarbeiten (alle 2 Minuten)
*/2 * * * * cd /var/www/html/ksbdueren && php bin/console messenger:consume async --limit=10 --time-limit=60 >> /var/log/messenger.log 2>&1
```

---

## Testing

### 1. Test-Buchung durchführen:
```
URL: https://dp-smartsolutions.de/ksbdueren/public/event-center/booking
```

### 2. Messenger Queue prüfen:
```bash
# Zeige ausstehende Messages
php bin/console messenger:stats

# Verarbeite Messages
php bin/console messenger:consume async -vv --limit=5
```

### 3. Logs prüfen:
```bash
# Event Center Email Logs
tail -f var/log/prod.log | grep "Event Center"

# Messenger Logs
tail -f var/log/messenger.log
```

---

## Standard-Template

Falls kein Template im Admin-Panel definiert ist, wird automatisch ein Standard-Template verwendet. Dieses ist im Code im MessageHandler `SendEventCenterEmailMessageHandler.php` definiert.

---

## Fehlerbehandlung

### Message schlug fehl (Retry):
Symfony Messenger versucht automatisch 3x, eine fehlgeschlagene Message zu verarbeiten.

### Failed Messages anzeigen:
```bash
php bin/console messenger:failed:show
```

### Failed Message erneut versuchen:
```bash
php bin/console messenger:failed:retry
```

---

## Admin-Benachrichtigungen

Bei jeder neuen Buchung wird zusätzlich eine Admin-Benachrichtigung an `{admin_email}` (aus `.env`: `ADMIN_EMAIL`) gesendet.

Diese enthält:
- Alle Buchungsdetails
- Kundendaten
- Link zur Buchungsverwaltung

---

## Migration zu Template-System (für bestehende Systeme)

Das System funktioniert jetzt:
1. ✅ Mit Templates (falls vorhanden im Admin-Panel)
2. ✅ Mit Standard-Template (Fallback, wenn kein Template definiert)
3. ✅ Asynchron über Messenger (nicht-blockierend)

**Keine Breaking Changes** - Das System funktioniert sofort ohne Template-Erstellung!

---

## Weitere Features (zukünftig)

- [ ] Paket-spezifische Templates (Template pro Event-Paket)
- [ ] Stornierungsbestätigung
- [ ] Erinnerungs-Emails X Tage vor Event
- [ ] Email-Versandstatistik im Admin-Panel

