# Implementación Coming Soon / Development Mode

## Resumen

Implementación del modo "Coming Soon" / "On Development" siguiendo las mejores prácticas de Laravel y el sistema CD-System.

## Arquitectura

### 1. Configuración (`config/site.php`)

```php
'development' => [
    'enabled' => true,  // Activar/desactivar modo development
    'title' => 'Our Website is Coming Soon',
    'subtitle' => 'We are working hard to give you the best experience.',
    'progress' => [
        'conception' => ['label' => 'Conception', 'percentage' => 100, 'status' => 'Finished'],
        'design' => ['label' => 'Design', 'percentage' => 85, 'status' => 'In Progress'],
        'development' => ['label' => 'Development', 'percentage' => 75, 'status' => 'In Progress'],
    ],
    'show_newsletter' => true,
],
```

### 2. Servicio (`app/Services/MaintenanceService.php`)

**Métodos agregados:**
- `isDevelopmentMode()`: Verifica si el modo development está activo
- `getMaintenanceView()`: Retorna la vista correcta según el modo activo

**Lógica de prioridad:**
1. Si `development.enabled = true` → Muestra `_coming-soon.blade.php`
2. Si `development.enabled = false` → Muestra `_maintenance.blade.php`

### 3. Vista (`resources/views/modules/cd-base/frontend/_coming-soon.blade.php`)

**Características:**
- Extiende `layout.front.maintenance` (reutiliza meta tags y estructura)
- Verifica existencia de rutas antes de usarlas (`Route::has()`)
- Verifica si el módulo newsletter está activo antes de mostrar formulario
- Manejo robusto de errores y validaciones
- AJAX para envío de formulario sin recargar página

## Mejores Prácticas Implementadas

### ✅ Verificación de Rutas

**Antes (❌ Incorrecto):**
```blade
<form action="{{ route('newsletter.subscribe') ?? '#' }}" method="POST">
```

**Después (✅ Correcto):**
```blade
@php
    $newsletterRouteExists = Route::has('front.newsletter.subscribe') || Route::has('newsletter.subscribe');
    $newsletterRoute = Route::has('front.newsletter.subscribe') ? 'front.newsletter.subscribe' : (Route::has('newsletter.subscribe') ? 'newsletter.subscribe' : null);
@endphp
<form action="{{ $newsletterRoute ? route($newsletterRoute) : '#' }}" method="POST">
```

### ✅ Verificación de Módulos

```blade
@php
    $newsletterModuleActive = is_module_active('newsletter');
    $canShowNewsletter = $newsletterEnabled && $newsletterRouteExists && $newsletterModuleActive;
@endphp
@if($canShowNewsletter)
    <!-- Formulario newsletter -->
@endif
```

### ✅ Manejo de Errores en Controlador

**Mejoras en `NewsletterController`:**
- Manejo de excepciones con try-catch
- Respuestas JSON para peticiones AJAX
- Respuestas de redirección para peticiones normales
- Validación robusta con mensajes de error claros
- Códigos HTTP apropiados (200, 422, 500)

### ✅ AJAX Implementation

- Validación del lado del cliente
- Feedback visual (spinner, mensajes)
- Manejo de errores de red
- No bloquea la UI durante el envío

### ✅ Seguridad

- CSRF token en formularios
- Validación de entrada en servidor
- Sanitización de datos
- Verificación de existencia de rutas antes de usarlas

## Uso

### Activar Modo Development

```php
// config/site.php
'development' => [
    'enabled' => true,
    // ... resto de configuración
]
```

### Desactivar Modo Development

```php
// config/site.php
'development' => [
    'enabled' => false,
    // ... resto de configuración
]
```

### Personalizar Contenido

Editar en `config/site.php`:
- `development.title`: Título principal
- `development.subtitle`: Subtítulo/descripción
- `development.progress`: Barras de progreso
- `development.show_newsletter`: Mostrar/ocultar formulario

## Flujo de Verificación

1. **Controlador verifica modo development:**
   ```php
   if (MaintenanceService::isDevelopmentMode()) {
       return view(MaintenanceService::getMaintenanceView());
   }
   ```

2. **Vista verifica dependencias:**
   - Ruta existe (`Route::has()`)
   - Módulo activo (`is_module_active()`)
   - Configuración habilitada (`config()`)

3. **Controlador maneja peticiones:**
   - AJAX → JSON response
   - Normal → Redirect response

## Ventajas de esta Implementación

1. **Robustez**: No falla si faltan rutas o módulos
2. **Mantenibilidad**: Configuración centralizada
3. **Escalabilidad**: Fácil agregar nuevas funcionalidades
4. **UX**: Feedback visual y AJAX sin recargas
5. **Seguridad**: Validaciones y CSRF protection
6. **Compatibilidad**: Funciona con y sin módulos activos

## Testing

### Verificar que funciona:

1. Activar modo development:
   ```php
   config(['site.development.enabled' => true]);
   ```

2. Verificar que muestra coming-soon:
   - Visitar cualquier ruta del frontend
   - Debe mostrar `_coming-soon.blade.php`

3. Verificar newsletter:
   - Si módulo activo y ruta existe → Muestra formulario
   - Si no → No muestra formulario (sin errores)

4. Desactivar modo development:
   ```php
   config(['site.development.enabled' => false]);
   ```
   - Debe mostrar sitio normal o maintenance según configuración

## Notas Importantes

- El modo development tiene **prioridad** sobre el modo maintenance
- Si `development.enabled = true`, siempre muestra coming-soon
- El formulario de newsletter solo se muestra si:
  - `development.show_newsletter = true`
  - `Route::has('front.newsletter.subscribe')` o `Route::has('newsletter.subscribe')`
  - `is_module_active('newsletter') = true`
