# Arquitectura de Configuración de Módulos

## 🎯 **Separación de Responsabilidades**

### **1. `cd-system.php` - Control de Acceso a Rutas**
```php
'modules' => [
    'blog' => [
        'active' => true,        // ✅ Habilita acceso a rutas /blog/*
        'name' => 'Blog',
        'description' => 'Noticias y publicaciones',
        'version' => '1.0.0',
    ],
    'services' => [
        'active' => false,       // ❌ Bloquea acceso a rutas /services/*
        'name' => 'Services',
        'description' => 'Servicios y capacidades',
        'version' => '1.0.0',
    ],
]
```

**Funcionalidad:**
- ✅ `active: true` → Rutas accesibles, middleware permite acceso
- ❌ `active: false` → Rutas bloqueadas, middleware redirige con error
- 🔒 Middleware `module.enabled` protege todas las rutas del módulo

### **2. `site.php` - Control de Visibilidad en Navegación**

#### **Navegación Principal (Siempre Visible)**
```php
'navegacion_principal' => [
    'inicio' => ['active' => true, 'order' => 1],
    'about' => ['active' => true, 'order' => 2],
    'contact' => ['active' => true, 'order' => 3],
]
```

#### **Módulos Principales (Visibilidad Opcional)**
```php
'modulos_principales' => [
    'services' => [
        'title' => 'Servicios',
        'url' => '/services',
        'active' => true,        // ✅ Muestra en navegación
        'show_in_header' => true, // ✅ Muestra en header
        'show_in_footer' => true, // ✅ Muestra en footer
    ],
    'gallery' => [
        'title' => 'Galería',
        'url' => '/gallery', 
        'active' => false,       // ❌ Oculta de navegación
        'show_in_header' => false,
        'show_in_footer' => true, // ✅ Solo en footer
    ],
]
```

## 🚀 **Casos de Uso**

### **Caso 1: Módulo Completamente Deshabilitado**
```php
// cd-system.php
'blog' => ['active' => false]  // ❌ Sin acceso a rutas

// site.php  
'blog' => ['active' => false]  // ❌ Sin mostrar en navegación
```
**Resultado:** Módulo invisible y inaccesible

### **Caso 2: Módulo Accesible pero Oculto**
```php
// cd-system.php
'blog' => ['active' => true]   // ✅ Acceso a rutas permitido

// site.php
'blog' => ['active' => false]  // ❌ Oculto de navegación
```
**Resultado:** Acceso directo por URL funciona, pero no aparece en menús

### **Caso 3: Módulo Visible pero Restringido**
```php
// cd-system.php
'blog' => ['active' => false]  // ❌ Sin acceso a rutas

// site.php
'blog' => ['active' => true]   // ✅ Visible en navegación
```
**Resultado:** Aparece en menús pero redirige con error al hacer clic

### **Caso 4: Módulo Completamente Habilitado**
```php
// cd-system.php
'blog' => ['active' => true]   // ✅ Acceso a rutas permitido

// site.php
'blog' => ['active' => true]   // ✅ Visible en navegación
```
**Resultado:** Módulo completamente funcional

## 🎨 **Configuración Granular por Ubicación**

```php
'modulos_principales' => [
    'services' => [
        'active' => true,
        'show_in_header' => true,   // Header principal
        'show_in_footer' => true,   // Footer principal  
        'show_in_mobile' => true,   // Menú móvil
        'show_in_sitemap' => true,  // Sitemap
        'order' => 1,
    ],
]
```

## 🔧 **Implementación Técnica**

### **Función `get_dynamic_navigation()`**
```php
function get_dynamic_navigation($type = 'header') {
    $navigation = [];
    
    // 1. Agregar navegación principal (siempre visible)
    foreach (config('site.footer.navegacion_principal') as $key => $item) {
        if ($item['active']) {
            $navigation[$key] = $item;
        }
    }
    
    // 2. Agregar módulos activos (si están habilitados)
    foreach (config('cd-system.modules') as $module => $config) {
        if ($config['active'] && is_module_active($module)) {
            $navConfig = config("site.footer.modulos_principales.{$module}");
            if ($navConfig && $navConfig['active']) {
                $navigation[$module] = $navConfig;
            }
        }
    }
    
    return $navigation;
}
```

### **Middleware de Protección**
```php
// En rutas
Route::group(['middleware' => 'module.enabled:blog'], function() {
    Route::get('/blog', [BlogController::class, 'index']);
    Route::get('/blog/{slug}', [BlogController::class, 'show']);
});
```

## 📋 **Recomendaciones**

1. **`cd-system.php`** → Control de acceso (seguridad)
2. **`site.php`** → Control de visibilidad (UX)
3. **Separación clara** entre demos base y módulos adicionales
4. **Configuración granular** por ubicación (header, footer, mobile)
5. **Middleware robusto** para protección de rutas
6. **Función unificada** para navegación dinámica
