# Paso 3 — Módulos activos

Este paso valida que la **configuración de módulos** del producto (demo) coincida con lo vendido al cliente: qué módulos están activos, en qué demo corre el sitio y cómo aparecen en header/footer.

## Idea central

- **Fuente de verdad:** `database/seeders/project-data/cd-system.json`
- **Contenido:** `theme` (demo activo, skin, fuentes) y `modules` (por cada módulo: `active`, `navigation.header`, `navigation.footer`).
- **Flujo:** El JSON se carga en la base de datos con **CdSystemSeeder**. La app usa `config('cd-system')` (merge con `config/cd-system.php` vía CdSystemConfigService). Las vistas usan `config('cd-system.modules.{nombre}.active')` y `is_module_active('nombre')` para mostrar/ocultar enlaces y bloques.
- **Seeders de contenido:** **Project_Seeder** lee `cd-system.json` y solo ejecuta los seeders de los módulos con `active: true` (MenuSeeder, BlogSeeder, FaqsSeeder, etc.). El resto se omite.

Un solo `cd-system.json` por proyecto (o por producto de referencia). Para Muma (Restaurant) los módulos activos son: **Menu**, **Blog** y **FAQs** (más las páginas base del demo: About, Contact, y módulos de sistema como project-setup si aplica).

---

## Paso a paso

### 1. Definir módulos del producto

Listar qué módulos debe tener el proyecto según el producto vendido.

**Ejemplo — Muma (Restaurant):**

| Módulo | Activo | Header | Footer |
|--------|--------|--------|--------|
| menu   | Sí     | Sí     | Sí     |
| blog   | Sí     | Sí     | Sí     |
| faqs   | Sí     | No     | Sí     |
| about  | Sí     | Sí     | Sí     |
| contact| Sí     | Sí     | Sí     |
| project-setup | Sí (admin) | — | — |
| Resto (products, services, projects, gallery, team, news, references, newsletter, etc.) | No | No | No |

El demo para Restaurant es **demo-restaurant** (`theme.demo`).

### 2. Editar `cd-system.json`

- Ruta: `database/seeders/project-data/cd-system.json`
- Ajustar:
  - **theme.demo:** nombre del demo (ej. `demo-restaurant` para Muma).
  - **theme.skin:** normalmente `"auto"`.
  - **modules:** para cada módulo, `"active": true/false` y, si aplica, `"navigation": { "header": true/false, "footer": true/false }`.

Estructura mínima de ejemplo (Muma):

```json
{
  "theme": {
    "demo": "demo-restaurant",
    "skin": "auto"
  },
  "modules": {
    "blog": { "active": true, "navigation": { "header": true, "footer": true } },
    "menu": { "active": true, "navigation": { "header": true, "footer": true } },
    "faqs": { "active": true, "navigation": { "header": false, "footer": true } },
    "about": { "active": true, "navigation": { "header": true, "footer": true } },
    "contact": { "active": true, "navigation": { "header": true, "footer": true } },
    "project-setup": { "active": true },
    "products": { "active": false, "navigation": { "header": false, "footer": false } },
    "services": { "active": false, "navigation": { "header": false, "footer": false } },
    "projects": { "active": false, "navigation": { "header": false, "footer": false } },
    "gallery": { "active": false, "navigation": { "header": false, "footer": false } },
    "team": { "active": false, "navigation": { "header": false, "footer": false } },
    "news": { "active": false, "navigation": { "header": false, "footer": false } },
    "references": { "active": false, "navigation": { "header": false, "footer": false } },
    "newsletter": { "active": false },
    "translations": { "active": false }
  },
  "maintenance": { "enabled": false, "allowed_ips": ["127.0.0.1", "::1"] }
}
```

Todos los módulos que existan en `config/cd-system.php` deben estar presentes en el JSON si se quiere control explícito; si faltan, se usan los valores por defecto del config.

### 3. Ejecutar seeders

1. **CdSystemSeeder** (carga tema + módulos a la DB):

   ```bash
   php artisan db:seed --class=CdSystemSeeder
   ```

2. **(Opcional)** Si se quiere repoblar también el contenido de los módulos activos (menu, blog, faqs):

   ```bash
   php artisan db:seed --class=Project_Seeder
   ```

   Solo se ejecutarán los seeders de módulos con `active: true` en `cd-system.json`.

### 4. Refrescar caché

```bash
php artisan cache:clear
php artisan view:clear
```

Si usáis caché de config en producción: `php artisan config:clear` (y luego `config:cache` si aplica).

### 5. Validar

- **Demo correcto:** Página de inicio y layout corresponden al demo definido en `theme.demo` (ej. demo-restaurant).
- **Header:** Enlaces visibles solo para módulos con `navigation.header: true` (ej. Menu, Blog, About, Contact para Muma).
- **Footer:** Enlaces visibles solo para módulos con `navigation.footer: true` (ej. Menu, Blog, FAQs, About, Contact).
- **Rutas:** `/menu`, `/blog`, `/faqs` responden y no dan 404 cuando los módulos están activos.
- **Admin / Panel:** Opciones de configuración o menús de módulos inactivos no deberían mostrarse (según implementación del panel).

---

## Criterios de cierre del Paso 3

- [ ] `cd-system.json` tiene `theme.demo` correcto para el producto (ej. `demo-restaurant` para Muma).
- [ ] Solo los módulos del producto están en `active: true` (Muma: menu, blog, faqs, about, contact, project-setup según necesidad).
- [ ] `navigation` de cada módulo activo coherente con header/footer deseado.
- [ ] CdSystemSeeder ejecutado tras cambios en el JSON; caché limpiada.
- [ ] En el front: header y footer muestran solo los enlaces de los módulos activos; rutas `/menu`, `/blog`, `/faqs` accesibles para Muma.

---

## Relación con otros pasos

- **Paso 1 (Brand Assets)** y **Paso 2 (Site Data + Analytics)** deben estar validados antes: identidad y datos del sitio no dependen de módulos, pero el sitio público sí usa el mismo demo y la misma config.
- Tras el Paso 3 se puede documentar contenido por módulo (datos de menú, entradas de blog, FAQs) y seeders específicos (MenuSeeder, BlogSeeder, FaqsSeeder) para el proyecto de referencia.

## Referencia rápida — Muma (Restaurant)

| Elemento        | Valor              |
|----------------|--------------------|
| Demo           | demo-restaurant    |
| Módulos activos| Menu, Blog, FAQs   |
| Páginas base   | About, Contact     |
| Seeders de contenido | MenuSeeder, BlogSeeder, FaqsSeeder (vía Project_Seeder) |
