# Domain Configuration Integration - Claude v2

## 🎯 Überblick

Die Claude v2 SubdomainResolver-Middleware wurde erweitert, um die `config/domains.php` Konfigurationsdatei zu verwenden. Dies sorgt für eine zentrale, wartbare Domain-Konfiguration.

## 📁 Unterstützte Domain-Typen aus config/domains.php

### 1. Main Domain (`main`)
```php
'main' => [
    'host' => 'mivita.care',
    'type' => 'main',
]
```
- **Verhalten**: Keine Shop-Daten, normale Corporate Website
- **Session**: `.mivita.care`
- **Routing**: `routes/domains/main.php`

### 2. Shop Domain (`shop`) 
```php
'shop' => [
    'host' => 'mivita.shop',
    'type' => 'main-shop',
    'default_user_shop' => 'aloevera',
]
```
- **Verhalten**: Lädt Default-Shop (aloevera) aus Konfiguration
- **Session**: `.mivita.shop` 
- **Routing**: `routes/domains/shop.php`

### 3. CRM Domain (`crm`)
```php
'crm' => [
    'host' => 'my.mivita.care',
    'type' => 'crm',
]
```
- **Verhalten**: CRM-Interface, keine Shop-Daten
- **Session**: `.mivita.care`
- **Routing**: `routes/domains/crm.php`

### 4. Portal Domain (`portal`)
```php
'portal' => [
    'host' => 'in.mivita.care', 
    'type' => 'portal',
]
```
- **Verhalten**: Partner-Portal, keine Shop-Daten
- **Session**: `.mivita.care`
- **Routing**: `routes/domains/portal.php`

### 5. Checkout Domain (`checkout`)
```php
'checkout' => [
    'host' => 'checkout.mivita.care',
    'type' => 'checkout',
]
```
- **Verhalten**: Behält vorhandene Shop-Session für Checkout
- **Session**: `.mivita.care`
- **Routing**: `routes/domains/checkout.php`

### 6. User Shop Subdomains (`user-shop`)
```php
'user-shop' => [
    'host' => '{subdomain}.mivita.care',
    'type' => 'user-shop',
]
```
- **Verhalten**: Dynamische User-Shops basierend auf Subdomain
- **Session**: `.mivita.care`
- **Routing**: `routes/domains/user-shop.php`

## 🔒 Reserved Subdomains

Die Konfiguration definiert reservierte Subdomains, die nicht als User-Shops verwendet werden können:

```php
'reserved_subdomains' => [
    'my',       // CRM
    'in',       // Portal  
    'checkout', // Checkout
    'www',      // Standard
    'api',      // API
    'mail',     // Mail
],
```

## 🏗️ Parsing-Logik

### Reihenfolge der Domain-Auflösung:

1. **Exakte Übereinstimmungen** - Prüft main, shop, crm, portal, checkout
2. **User-Shop-Pattern** - Prüft `{subdomain}.mivita.care` Pattern
3. **Reserved-Check** - Stellt sicher, dass Subdomain nicht reserviert ist
4. **Unknown Fallback** - Redirect zu main domain

### Beispiel-Hosts:
```php
'mivita.care'           → type: 'main'
'mivita.shop'           → type: 'main-shop'  
'my.mivita.care'        → type: 'crm'
'in.mivita.care'        → type: 'portal'
'checkout.mivita.care'  → type: 'checkout'
'testuser.mivita.care'  → type: 'user-shop', subdomain: 'testuser'
'www.mivita.care'       → type: 'unknown' (reserved)
'unknown.example.com'   → type: 'unknown'
```

## ⚙️ Session-Domain-Konfiguration

Die Middleware konfiguriert automatisch die richtige Session-Domain:

```php
// Für .care Domains (main, crm, portal, checkout, user-shop):
Config::set('session.domain', '.mivita.care');

// Für .shop Domains:
Config::set('session.domain', '.mivita.shop');
```

## 🔗 URL-Generation

Die Middleware setzt `config('app.url')` für korrekte URL-Generation:

```php
// Beispiele:
'https://mivita.care'
'https://mivita.shop' 
'https://testuser.mivita.care'
'https://my.mivita.care'
```

## 🛠️ Konfiguration anpassen

### Environment-Variablen:
```env
APP_DOMAIN=mivita
APP_TLD_CARE=.care
APP_TLD_SHOP=.shop
APP_PROTOCOL=https://
APP_PRE_URL_CRM=my.
APP_PRE_URL_PORTAL=in.
APP_URL_CHECKOUT=checkout.
```

### Neue Domain hinzufügen:

1. **config/domains.php erweitern:**
```php
'new-domain' => [
    'host' => 'new.mivita.care',
    'type' => 'new-domain',
],
```

2. **SubdomainResolver.php erweitern:**
```php
'new-domain' => $this->handleNewDomain($request, $next, $domainInfo),
```

3. **Handler-Methode hinzufügen:**
```php
private function handleNewDomain($request, Closure $next, array $domainInfo)
{
    $this->configureSessionDomain($domainInfo['host']);
    Config::set('app.url', config('domains.protocol') . $domainInfo['host']);
    return $next($request);
}
```

4. **Route-Datei erstellen:**
```bash
touch routes/domains/new-domain.php
```

## 🧪 Testing mit Domain-Config

### Test-Szenarien:
```bash
# Main Domain
curl -H "Host: mivita.care" http://localhost/

# Shop Domain  
curl -H "Host: mivita.shop" http://localhost/

# User Shop
curl -H "Host: testuser.mivita.care" http://localhost/

# CRM
curl -H "Host: my.mivita.care" http://localhost/

# Portal
curl -H "Host: in.mivita.care" http://localhost/

# Checkout
curl -H "Host: checkout.mivita.care" http://localhost/

# Reserved Subdomain (should redirect)
curl -H "Host: www.mivita.care" http://localhost/

# Unknown Domain (should redirect)
curl -H "Host: unknown.example.com" http://localhost/
```

## ✅ Vorteile der Config-Integration

- **Zentrale Verwaltung**: Alle Domains in einer Datei
- **Umgebungs-spezifisch**: Verschiedene Domains für dev/staging/prod
- **Erweiterbar**: Neue Domains ohne Code-Änderungen
- **Validation**: Reserved subdomains verhindern Konflikte
- **Wartbar**: Klare Struktur und Dokumentation