# Configuraciones - CD-System

Documentación detallada de todos los archivos de configuración del sistema, su propósito, estructura y valores por defecto.

---

## 📋 Tabla de Contenidos

1. [config/cd-system.php](#configcd-systemphp)
2. [config/site.php](#configsitephp)
3. [config/projectTexts.json](#configprojecttextsjson)
4. [Otros Archivos de Configuración](#otros-archivos-de-configuración)
5. [Jerarquía de Configuración](#jerarquía-de-configuración)

---

## ⚙️ config/cd-system.php

### Propósito

Archivo de configuración principal del sistema. Define:
- Versión y metadata del sistema
- Demo y tema activo
- Módulos activos/inactivos
- Configuraciones de rendimiento y seguridad

### ⚠️ Estado: PROTEGIDO

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

**Protección**: Está en `.gitattributes` con `merge=ours` para que nunca se sobrescriba durante merges.

### Estructura

```php
return [
    // Metadata del sistema
    'version' => '2.0.0',
    'name' => 'CD-System Base',
    'description' => 'Sistema base universal para proyectos web modulares',
    'author' => 'Compañía Digital',
    
    // Configuración del tema
    'theme' => [
        'demo' => 'demo-law-firm-2',      // Demo activo
        'skin' => 'auto',                  // Skin (auto o específico)
        'fonts' => [
            'primary' => 'Montserrat',
            'secondary' => 'Montserrat',
            'tertiary' => 'Open Sans',
        ],
    ],
    
    // Módulos
    'modules' => [
        'blog' => [
            'active' => true,
            'name' => 'Blog',
            'description' => 'Noticias y publicaciones institucionales',
            'version' => '1.0.0',
        ],
        // ... más módulos
    ],
    
    // Mantenimiento
    'maintenance' => [
        'enabled' => false,
        'allowed_ips' => ['127.0.0.1', '::1'],
        'pages' => [/* ... */],
    ],
    
    // Rendimiento
    'performance' => [
        'cache' => [
            'enabled' => true,
            'duration' => 3600,
        ],
        'optimization' => [
            'minify_css' => true,
            'minify_js' => true,
            'compress_images' => true,
        ],
    ],
    
    // Seguridad
    'security' => [
        'csrf_protection' => true,
        'xss_protection' => true,
        'content_security_policy' => true,
        'rate_limiting' => [
            'enabled' => true,
            'max_attempts' => 60,
            'decay_minutes' => 1,
        ],
    ],
    
    // Personalización
    'customization' => [
        'branding' => [
            'logo_path' => 'cd-project/img/logos/',
            'favicon_path' => 'cd-project/img/favicon/',
            'images_path' => 'cd-project/img/',
        ],
        'content' => [
            'texts_file' => 'config/projectTexts.json',
            'translations_path' => 'resources/lang/',
        ],
    ],
];
```

### Valores Clave

#### Demo
```php
'theme' => [
    'demo' => 'demo-law-firm-2',  // Cambiar según proyecto
]
```

#### Módulos
```php
'modules' => [
    'blog' => ['active' => true],      // Activar
    'products' => ['active' => false], // Desactivar
]
```

---

## 🏠 config/site.php

### Propósito

Configuración de identidad del sitio, contacto, assets y contenido base.

### Estado

Puede ser sobrescrito por proyecto, pero contiene valores base/neutrales que sirven como plantilla.

### Estructura

```php
return [
    // Identidad
    'name' => 'CD-System Base',
    'url' => 'www.cd-system.com',
    'author' => 'Compañía Digital',
    'theme' => 'light',
    
    // SEO
    'seo' => [
        'keywords' => 'cd-system, sistema base, framework modular, laravel',
        'description' => 'CD-System Base - Sistema base universal...',
    ],
    
    // Open Graph
    'og' => [
        'title' => 'CD-System Base',
        'description' => 'Sistema base universal...',
        'image' => 'cd-project/img/meta-tags/og-image.png',
        'image_width' => 1200,
        'image_height' => 630,
    ],
    
    // Twitter Card
    'twitter' => [
        'card' => 'summary_large_image',
        'title' => 'CD-System Base',
        'description' => 'Sistema base universal...',
        'image' => 'cd-project/img/meta-tags/twitter-image.png',
    ],
    
    // Assets
    'assets' => [
        'favicon' => 'cd-project/img/favicon/favicon.ico',
        'apple_touch_icon' => 'cd-project/img/favicon/apple-touch-icon.png',
        'loader_logo' => 'cd-project/img/logos/logo-2.png',
        'main_logo' => 'cd-project/img/logos/logo.png',
        'main_logo_sticky' => 'cd-project/img/logos/logo.png',
        'footer_logo' => 'cd-project/img/logos/logo-alternative.png',
        'main_logo_alt' => 'CD-System Base',
        'main_logo_height' => 60,
    ],
    
    // Fuentes
    'fonts' => [
        'google' => [
            'families' => [],
        ],
        'local' => [
            'montserrat' => [
                'name' => 'Montserrat',
                'path' => 'template/css/fonts/montserrat/',
                'weights' => ['300', '400', '500', '600', '700'],
                'styles' => ['normal', 'italic'],
            ],
            'open-sans' => [
                'name' => 'Open Sans',
                'path' => 'template/css/fonts/open-sans/',
                'weights' => ['300', '400', '600', '700'],
                'styles' => ['normal', 'italic'],
            ],
        ],
    ],
    
    // Redes Sociales
    'social_media' => [
        'linkedin' => [
            'url' => 'https://www.linkedin.com/company/...',
            'icon' => 'fab fa-linkedin-in',
            'title' => 'LinkedIn',
            'active' => false,
        ],
        // ... más redes
    ],
    
    // Contacto
    'contact' => [
        'email' => 'info@companiadigital.com',
        'phone' => '+54',
        'phone_number' => '+54',
        'address' => '',
        'schedule' => 'Lunes a Viernes 9:00 - 18:00',
        'form_title' => 'Contactanos',
        'form_subtitle' => '¿Tenés preguntas? Estamos aquí para ayudarte.',
        'success_message' => '¡Gracias! Tu mensaje se ha enviado correctamente.',
        'error_message' => 'Hubo un error al enviar tu mensaje.',
    ],
    
    // Footer
    'footer' => [
        'description' => 'CD-System Base - Sistema base universal...',
        'social_text' => 'Seguinos en redes sociales:',
        'newsletter_title' => 'SUSCRIBITE A NUESTRAS NOVEDADES',
        'copyright_text' => 'Todos los derechos reservados.',
        'navegacion_principal' => [
            'inicio' => [
                'title' => 'Inicio',
                'url' => '/',
                'active' => true,
                'order' => 1,
            ],
            // ... más items
        ],
        'modules' => [
            'services' => [
                'title' => 'Servicios',
                'url' => 'services',
                'active' => false,
                'order' => 1,
                'page_header' => [
                    'active' => true,
                    'title' => 'Nuestros Servicios',
                    'subtitle' => 'Conocé nuestros servicios y soluciones.',
                    'background_image' => 'cd-project/img/generic/services-header.jpg',
                    'overlay' => true,
                    'overlay_opacity' => 7,
                ],
            ],
            // ... más módulos
        ],
    ],
    
    // Welcome (Homepage)
    'welcome' => [
        'title' => 'Bienvenido a CD-System',
        'subtitle' => 'Sistema base universal para proyectos web modulares',
        'show_progress' => false,
        'show_newsletter' => true,
    ],
    
    // About
    'about' => [
        'main_title' => 'CD-System <span>Base</span>',
        'main_subtitle' => 'Sistema base universal...',
        'sections' => [
            'mission' => [
                'title' => 'Nuestra Misión',
                'content' => '...',
            ],
            // ... más secciones
        ],
    ],
];
```

### Valores Clave para Adaptar

#### Identidad
```php
'name' => 'Law Firm',
'url' => 'https://lawfirm.example.com',
'author' => 'Law Firm',
```

#### Contacto
```php
'contact' => [
    'email' => 'contacto@lawfirm.com',
    'phone' => '+54 11 1234-5678',
    'address' => 'Calle Principal 123',
],
```

#### Assets
```php
'assets' => [
    'main_logo' => 'cd-project/img/logos/logo.png',
    'favicon' => 'cd-project/img/favicon/favicon.ico',
    // ...
],
```

---

## 📝 config/projectTexts.json

### Propósito

Textos y redacciones específicas del proyecto. Permite personalizar textos sin modificar código.

### Estado

Específico del proyecto - **NO se propaga** al core.

### Estructura

```json
{
  "welcome": {
    "title": "Bienvenido a Law Firm",
    "subtitle": "Servicios legales profesionales",
    "description": "..."
  },
  "about": {
    "main_title": "Sobre Nosotros",
    "main_subtitle": "Nuestro bufete",
    "sections": {
      "mission": {
        "title": "Nuestra Misión",
        "content": "..."
      },
      "vision": {
        "title": "Nuestra Visión",
        "content": "..."
      }
    }
  },
  "contact": {
    "form_title": "Contactanos",
    "form_subtitle": "¿Tenés preguntas?",
    "success_message": "¡Gracias! Tu mensaje se ha enviado correctamente."
  }
}
```

### Uso

El archivo es opcional. Si no existe, se usan los valores de `config/site.php`.

---

## 🔧 Otros Archivos de Configuración

### config/page-headers.php

Configuración de page headers por módulo y demo.

### config/demos.php

Configuraciones específicas por demo (si se usa).

### config/construction/

Configuraciones específicas del módulo construction (si aplica).

---

## 📊 Jerarquía de Configuración

### Orden de Precedencia

1. **Valores específicos del proyecto** (más alta prioridad)
   - `config/cd-system.php` (versión del proyecto)
   - `config/site.php` (puede sobrescribirse)
   - `config/projectTexts.json`

2. **Valores base del core**
   - `config/cd-system.php` (versión base)
   - `config/site.php` (versión base)

3. **Valores por defecto en código**
   - Helpers con valores fallback
   - Configuraciones hardcodeadas

### Ejemplo de Flujo

```php
// 1. Intenta obtener de projectTexts.json
$title = get_project_text('welcome.title');

// 2. Si no existe, usa config/site.php
if (!$title) {
    $title = config('site.welcome.title');
}

// 3. Si no existe, usa valor por defecto
if (!$title) {
    $title = 'Bienvenido';
}
```

---

## 🔍 Acceso a Configuraciones

### Desde Código PHP

```php
// Configuración del sistema
$demo = config('cd-system.theme.demo');
$isBlogActive = config('cd-system.modules.blog.active');

// Configuración del sitio
$siteName = config('site.name');
$contactEmail = config('site.contact.email');

// Helper functions
$demo = get_theme_demo();
$isActive = is_module_active('blog');
```

### Desde Vistas Blade

```blade
{{ config('site.name') }}
{{ config('cd-system.theme.demo') }}

@if(is_module_active('blog'))
    <!-- Contenido del blog -->
@endif
```

---

## ✅ Checklist de Configuración

### Configuración Base

- [ ] `config/cd-system.php` configurado con demo correcto
- [ ] Módulos activados/desactivados según necesidades
- [ ] `config/site.php` actualizado con identidad del proyecto
- [ ] `config/projectTexts.json` creado (opcional)

### Verificación

- [ ] Configuraciones se cargan correctamente
- [ ] Helpers funcionan correctamente
- [ ] Valores se muestran en vistas
- [ ] Cache limpiado después de cambios

---

## 📚 Referencias

- [Sistema Base](./01-sistema-base.md)
- [Adaptación a Proyectos](./02-adaptacion-proyecto.md)
- [Producto Law Firm 2](./03-producto-law-firm-2.md)
- [Explicación Config Protegido](../../EXPLICACION-CONFIG-PROTEGIDO.md)

---

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

