# Sistema Base - CD-System

Documentación completa del sistema base CD-System, sus componentes, arquitectura y funcionalidades core.

---

## 📋 Tabla de Contenidos

1. [Arquitectura General](#arquitectura-general)
2. [Componentes Core](#componentes-core)
3. [Sistema de Módulos](#sistema-de-módulos)
4. [Sistema de Demos](#sistema-de-demos)
5. [Helpers y Utilidades](#helpers-y-utilidades)
6. [Configuración Base](#configuración-base)

---

## 🏗️ Arquitectura General

### Estructura del Sistema

CD-System es un sistema base modular construido sobre Laravel que proporciona:

- **Base de código reutilizable**: Componentes, helpers, y funcionalidades comunes
- **Sistema modular**: Módulos independientes que se activan/desactivan por proyecto
- **Multi-demo**: Soporte para múltiples demos/templates visuales
- **Configuración flexible**: Adaptación a diferentes tipos de proyectos

### Principios de Diseño

1. **Separación Core vs Proyecto**
   - Core: Código reutilizable, no específico de proyecto
   - Proyecto: Configuraciones, datos y personalizaciones específicas

2. **Modularidad**
   - Módulos independientes y desacoplados
   - Activación/desactivación por configuración
   - Cada módulo puede tener sus propias rutas, controladores, modelos, vistas

3. **Configuración por Convención**
   - Valores por defecto sensatos
   - Override por proyecto cuando es necesario
   - Configuración centralizada en `config/cd-system.php`

---

## 🧩 Componentes Core

### 1. Core Adapters

Ubicación: `app/Core/Adapters/`

#### Theme.php
Gestiona la configuración del tema y demo activo:

```php
// Obtener demo activo
$demo = Theme::getDemo();

// Obtener opción de configuración
$value = Theme::getOption('scope', 'path', $default);
```

#### Util.php
Utilidades generales del sistema.

### 2. Core Bootstraps

Ubicación: `app/Core/Bootstraps/`

Bootstraps específicos por demo que inicializan configuraciones particulares.

### 3. Helpers Globales

Ubicación: `app/helpers.php`

Funciones helper globales del sistema:

```php
// Verificar si módulo está activo
is_module_active('blog')

// Obtener demo activo
get_theme_demo()

// Obtener skin del tema
get_theme_skin()

// Obtener navegación dinámica
get_dynamic_navigation('header')
```

### 4. Helpers Especializados

Ubicación: `app/Helpers/`

- **MetaTagsHelper**: Gestión de meta tags SEO
- **PageHeaderHelper**: Gestión de page headers por módulo/demo

---

## 📦 Sistema de Módulos

### Módulos Disponibles

CD-System incluye los siguientes módulos (activables por proyecto):

| Módulo | Descripción | Estado |
|--------|-------------|--------|
| `blog` | Blog/Noticias | ✅ Disponible |
| `services` | Servicios/Áreas de actuación | ✅ Disponible |
| `products` | Productos/Catálogo | ✅ Disponible |
| `projects` | Portfolio/Proyectos | ✅ Disponible |
| `gallery` | Galería de imágenes | ✅ Disponible |
| `team` | Equipo/Miembros | ✅ Disponible |
| `references` | Referencias/Testimonios | ✅ Disponible |
| `faqs` | Preguntas frecuentes | ✅ Disponible |
| `about` | Página sobre nosotros | ✅ Disponible |
| `contact` | Página de contacto | ✅ Disponible |
| `news` | Noticias (alternativo a blog) | ✅ Disponible |
| `newsletter` | Sistema de suscripción | ✅ Disponible |

### Configuración de Módulos

Los módulos se configuran en `config/cd-system.php`:

```php
'modules' => [
    'blog' => [
        'active' => true,
        'name' => 'Blog',
        'description' => 'Noticias y publicaciones',
        'version' => '1.0.0',
    ],
    // ...
],
```

### Verificación de Módulos

```php
// Helper function
if (is_module_active('blog')) {
    // Módulo blog está activo
}

// Directamente desde config
$isActive = config('cd-system.modules.blog.active', false);
```

### Estructura de un Módulo

```
app/Modules/{ModuleName}/
├── Controllers/
│   ├── Admin/
│   └── Frontend/
├── Models/
├── Requests/
├── Resources/
│   └── views/
│       ├── admin/
│       └── frontend/
└── Routes/
    └── {module}.php
```

---

## 🎨 Sistema de Demos

### Demos Disponibles

CD-System soporta múltiples demos/templates visuales. Cada demo tiene:

- Layouts específicos (header, footer)
- Assets visuales (CSS, imágenes)
- Configuraciones específicas
- Vistas adaptadas

### Demos Documentados

| Demo | Descripción | Skin | Estado |
|------|-------------|------|--------|
| `demo-law-firm-2` | Bufetes de abogados | `skin-law-firm-2` | ✅ Optimizado |
| `demo-construction` | Construcción y obras | `skin-construction` | ✅ Optimizado |
| `demo-accounting-1` | Servicios contables | `skin-accounting-1` | ✅ Disponible |
| `demo-marketing-1` | Marketing y agencias | `skin-marketing-1` | ✅ Disponible |
| `demo-creative-agency-2` | Agencias creativas | `skin-creative-agency-2` | ✅ Optimizado |
| `demo-architecture-2` | Arquitectura | `skin-architecture-2` | ✅ Disponible |
| `demo-transportation-logistic` | Transporte y logística | `skin-transportation-logistic` | ✅ Disponible |
| `demo-sass` | SaaS y aplicaciones | `skin-sass` | ✅ Disponible |

### Configuración de Demo

```php
// config/cd-system.php
'theme' => [
    'demo' => 'demo-law-firm-2',
    'skin' => 'auto', // o 'skin-law-firm-2' específico
    'fonts' => [
        'primary' => 'Montserrat',
        'secondary' => 'Montserrat',
        'tertiary' => 'Open Sans',
    ],
],
```

### Mapeo Demo → Skin

El sistema mapea automáticamente demos a skins mediante `get_demo_skin_mapping()` en `app/helpers.php`.

### Layouts por Demo

Cada demo puede tener layouts específicos:

```
resources/views/layout/front/
├── headers/
│   ├── demo-law-firm-2.blade.php
│   ├── demo-construction.blade.php
│   └── default.blade.php
└── footers/
    ├── demo-law-firm-2.blade.php
    ├── demo-construction.blade.php
    └── default.blade.php
```

---

## 🛠️ Helpers y Utilidades

### Helpers de Demo

```php
// Obtener demo activo
$demo = get_theme_demo();

// Obtener skin activo
$skin = get_theme_skin();

// Verificar si demo tiene JS custom
$hasJs = demo_has_custom_js($demo);

// Verificar si demo tiene CSS custom
$hasCss = demo_has_custom_css($demo);

// Obtener layout para componente
$headerLayout = get_demo_layout('header');
```

### Helpers de Módulos

```php
// Verificar módulo activo
if (is_module_active('blog')) { }

// Obtener todos los módulos activos
$activeModules = get_active_modules();

// Obtener navegación dinámica
$headerNav = get_dynamic_navigation('header');
$footerNav = get_dynamic_navigation('footer');
```

### Helpers de Configuración

```php
// Obtener configuración completa del demo
$config = get_demo_configuration($demo);

// Validar compatibilidad demo-skin
$isCompatible = validate_skin_demo_compatibility($demo, $skin);
```

---

## ⚙️ Configuración Base

### Archivos de Configuración Core

#### 1. `config/cd-system.php`
Configuración principal del sistema:
- Versión y metadata
- Demo y tema activo
- Módulos activos/inactivos
- Configuraciones de rendimiento y seguridad

**⚠️ IMPORTANTE**: Este archivo es **PROTEGIDO** y NO se propaga del proyecto al core porque contiene configuraciones específicas de cada proyecto.

#### 2. `config/site.php`
Configuración base del sitio (identidad base):
- Nombre, URL, autor
- Contacto
- Assets (logos, favicons)
- Redes sociales
- Footer y navegación base

**Nota**: Este archivo contiene valores base/neutrales. Los proyectos pueden tener sus propios valores.

#### 3. `app/helpers.php`
Funciones helper globales y mapeos:
- Mapeo demo → skin
- Mapeo demo → layouts
- Funciones de utilidad

---

## 🔄 Flujo de Carga

### 1. Inicialización del Sistema

```
1. Laravel Boot
2. Service Providers
3. Configuración (config/cd-system.php, config/site.php)
4. Helpers (app/helpers.php)
5. View Composers
```

### 2. Determinación de Demo

```
1. Leer config('cd-system.theme.demo')
2. Validar demo existe
3. Cargar configuración específica del demo
4. Aplicar skin correspondiente
```

### 3. Carga de Módulos

```
1. Leer config('cd-system.modules')
2. Filtrar módulos activos
3. Cargar rutas de módulos activos
4. Aplicar middleware de módulos
```

---

## 📚 Referencias

- [Estándares de Módulos](../../MODULE_STANDARDS.md)
- [Arquitectura de Page Headers](../../PAGE_HEADERS_ARCHITECTURE.md)
- [Sistema Multi-Demo](../../multi-demo-system-summary.md)

---

**Última actualización**: 2025-01-XX  
**Versión del documento**: 1.0.0

