# 🎨 Actualizar Identidad y Configuración del Proyecto

## 📋 Resumen

Guía completa para actualizar la identidad visual y configuración de un proyecto usando el comando `project:update-assets`. Este comando permite actualizar logos, favicons, skins CSS y archivos de configuración PHP (`cd-system.php` y `site.php`) de forma segura y automatizada.

---

## 🎯 Objetivo

Actualizar de forma completa la identidad de un proyecto incluyendo:
- **Assets visuales**: Logos, favicons, manifest
- **Skin CSS**: Estilos personalizados del tema
- **Configuración del sistema**: Demo, módulos activos (`cd-system.php`)
- **Configuración del sitio**: Identidad, SEO, contenido estratégico (`site.php`)

---

## 📦 Archivos Requeridos

### Estructura Completa de Archivos

Los archivos deben estar en una carpeta (típicamente `public/cd-project/assets/`):

```
carpeta-con-assets/
├── 📸 LOGOS (Requeridos)
│   ├── logo.png                    # Logo principal del header
│   ├── logo-2.png                  # Logo alternativo (loader, sticky)
│   └── logo-alternative.png        # Logo para footer
│
├── 🎯 FAVICONS (Requeridos)
│   ├── favicon.ico                 # Favicon ICO estándar
│   ├── favicon-48x48.png           # Favicon 48x48px
│   ├── favicon-96x96.png           # Favicon 96x96px
│   ├── favicon.svg                 # Favicon SVG (escalable)
│   ├── apple-touch-icon.png        # Icono para dispositivos Apple
│   ├── web-app-manifest-192x192.png # Icono PWA 192x192px
│   ├── web-app-manifest-512x512.png # Icono PWA 512x512px
│   └── site.webmanifest            # Manifest PWA (JSON)
│
├── 🎨 SKIN CSS (Opcional)
│   └── skin-*.css                  # Skin personalizado (ej: skin-accounting-2.css)
│
├── ⚙️ CONFIGURACIÓN (Opcional)
│   ├── cd-system.php               # Configuración del sistema (demo, módulos)
│   └── site.php                    # Configuración del sitio (identidad, SEO, contenido)
│
└── 📸 META TAGS (Opcional)
    ├── og-image.png                # Imagen Open Graph
    └── twitter-image.png           # Imagen Twitter Card
```

---

## 🚀 Proceso Paso a Paso

### Paso 1: Preparar los Assets

1. **Organizar todos los archivos** en una carpeta:
   ```bash
   # Ejemplo: crear carpeta con assets del proyecto
   mkdir -p ~/assets-mi-proyecto
   # Copiar todos los archivos allí
   ```

2. **Verificar que tienes los archivos requeridos**:
   ```bash
   ls -la ~/assets-mi-proyecto/
   # Debe mostrar al menos los 11 archivos requeridos
   ```

### Paso 2: Preparar Archivos de Configuración (Opcional)

Si quieres actualizar también la configuración del proyecto, prepara los archivos PHP:

#### `cd-system.php` (Ejemplo mínimo)

```php
<?php
return [
    'theme' => [
        'demo' => 'demo-accounting-2',  // Demo a usar
        'skin' => 'skin-accounting-2',   // Skin a usar
    ],
    'modules' => [
        'blog' => ['active' => true],
        'services' => ['active' => false],
        'products' => ['active' => true],
        'gallery' => ['active' => true],
        'faqs' => ['active' => true],
        // ... otros módulos
    ],
];
```

#### `site.php` (Ejemplo mínimo)

```php
<?php
return [
    // Identidad básica
    'name' => 'Mi Proyecto',
    'tagline' => 'Mi tagline',
    'url' => 'https://miproyecto.com',
    'author' => 'Nombre del Autor',
    
    // SEO
    'seo' => [
        'keywords' => 'palabra1, palabra2, palabra3',
        'description' => 'Descripción SEO completa',
        'title' => 'Título SEO',
    ],
    
    // Open Graph
    'og' => [
        'title' => 'Título Open Graph',
        'description' => 'Descripción Open Graph',
        'image' => 'cd-project/img/meta-tags/og-image.jpg',
    ],
    
    // Contenido estratégico (solo las secciones que quieras actualizar)
    'welcome' => [
        'hero_title' => 'Mi Título Principal',
        'hero_subtitle' => 'Mi Subtítulo',
        'hero_description' => 'Descripción del hero',
    ],
    
    // Contacto
    'contact' => [
        'email' => 'contacto@miproyecto.com',
        'phone' => '+54 381 123-4567',
    ],
    
    // Redes sociales
    'social_media' => [
        'linkedin' => [
            'url' => 'https://linkedin.com/company/miproyecto',
            'active' => true,
        ],
        'instagram' => [
            'url' => 'https://instagram.com/miproyecto',
            'active' => true,
        ],
    ],
];
```

**⚠️ IMPORTANTE**: 
- Solo incluye las secciones que quieres actualizar
- Los valores deben ser **strings simples** (no arrays multiidioma)
- El comando hará merge inteligente: solo actualizará lo que esté presente

### Paso 3: Copiar Assets al Proyecto

```bash
# Navegar al proyecto
cd /Applications/XAMPP/xamppfiles/htdocs/mi-proyecto

# Opción A: Copiar a carpeta temporal (recomendado)
mkdir -p public/cd-project/assets-temp
cp ~/assets-mi-proyecto/* public/cd-project/assets-temp/

# Opción B: Copiar directamente a assets
cp ~/assets-mi-proyecto/* public/cd-project/assets/
```

### Paso 4: Ejecutar el Comando

#### Modo Básico (con backup)

```bash
php artisan project:update-assets public/cd-project/assets --backup
```

#### Modo con Validación (recomendado)

```bash
# El comando valida automáticamente la sintaxis PHP
php artisan project:update-assets public/cd-project/assets --backup --project="mi-proyecto"
```

#### Modo Dry-Run (simular sin aplicar)

```bash
# Ver qué se cambiaría sin aplicar cambios
php artisan project:update-assets public/cd-project/assets --dry-run
```

#### Omitir Validación (si hay problemas)

```bash
# Si los archivos PHP tienen problemas menores pero quieres continuar
php artisan project:update-assets public/cd-project/assets --backup --skip-validation
```

### Paso 5: Limpiar Caché de Configuración

```bash
# Limpiar caché para aplicar cambios
php artisan config:clear
php artisan cache:clear
```

### Paso 6: Verificar Cambios

```bash
# Verificar logos
ls -la public/cd-project/img/logos/

# Verificar favicons
ls -la public/cd-project/img/favicon/

# Verificar skin
ls -la public/template/css/skins/

# Verificar configuración
cat config/cd-system.php | grep "demo"
cat config/site.php | grep "name"
```

---

## 📖 Sintaxis Completa del Comando

```bash
php artisan project:update-assets {source_dir} [opciones]
```

### Parámetros

- `source_dir` (requerido): Directorio fuente con los assets
  - Puede ser ruta relativa: `public/cd-project/assets`
  - Puede ser ruta absoluta: `/ruta/absoluta/a/assets`

### Opciones

- `--project=` (opcional): Nombre del proyecto (solo informativo)
- `--backup` (opcional): Crear backup antes de actualizar
- `--dry-run` (opcional): Simular sin aplicar cambios
- `--skip-validation` (opcional): Omitir validación de sintaxis PHP

### Ejemplos de Uso

```bash
# Básico con backup
php artisan project:update-assets public/cd-project/assets --backup

# Con nombre de proyecto
php artisan project:update-assets public/cd-project/assets --backup --project="mi-proyecto"

# Simular cambios (dry-run)
php artisan project:update-assets public/cd-project/assets --dry-run

# Desde carpeta externa
php artisan project:update-assets /Users/mi-usuario/assets-proyecto --backup

# Omitir validación
php artisan project:update-assets public/cd-project/assets --backup --skip-validation
```

---

## 🔍 Qué Hace el Comando

### 1. Validación de Estructura

- ✅ Verifica que existan assets mínimos
- ✅ Valida sintaxis PHP de archivos de configuración
- ✅ Verifica permisos de lectura
- ✅ Muestra warnings y errores claros

### 2. Procesamiento de Assets

- ✅ **Logos**: Copia a `public/cd-project/img/logos/`
- ✅ **Favicons**: Copia a `public/cd-project/img/favicon/`
- ✅ **Manifest**: Procesa y corrige rutas automáticamente
- ✅ **Skin CSS**: Copia a `public/template/css/skins/`
- ✅ **Meta tags**: Copia a `public/cd-project/img/meta-tags/` (opcional)

### 3. Procesamiento de Configuración

#### `cd-system.php`

Actualiza:
- ✅ **Demo**: `theme.demo`
- ✅ **Skin**: `theme.skin`
- ✅ **Módulos**: Estado activo/inactivo de cada módulo

**Merge inteligente**: Solo actualiza las secciones presentes en el archivo fuente.

#### `site.php`

Actualiza:
- ✅ **Identidad**: `name`, `tagline`, `url`, `author`
- ✅ **SEO**: Configuración completa de SEO
- ✅ **Open Graph**: Metadatos OG
- ✅ **Twitter Card**: Metadatos Twitter
- ✅ **Contacto**: Email, teléfono, dirección
- ✅ **Redes sociales**: URLs y estado activo
- ✅ **Contenido estratégico**: `welcome`, `about`, `footer`, `homepage`, `blog`, `auth`

**Merge inteligente**: 
- Si el valor fuente es **string simple** → reemplaza completamente (no preserva arrays multiidioma)
- Si el valor fuente es **array** → hace merge recursivo

---

## ⚠️ Consideraciones Importantes

### Arrays Multiidioma

**NO uses arrays multiidioma** en los archivos de configuración fuente. El comando está diseñado para trabajar con valores simples (strings).

❌ **NO hacer**:
```php
'welcome' => [
    'hero_title' => [0 => 'Título ES', 1 => 'Title EN'],  // Array multiidioma
],
```

✅ **Hacer**:
```php
'welcome' => [
    'hero_title' => 'Mi Título Simple',  // String simple
],
```

### Compatibilidad Demo/Skin

El comando **no valida** automáticamente la compatibilidad entre demo y skin. Asegúrate de que:
- El demo y skin sean compatibles
- El skin CSS corresponda al demo seleccionado

### Backups

- Los backups se crean en: `storage/app/backups/assets/YYYY-MM-DD_HHMMSS/`
- Los backups de configuración se crean como: `config/cd-system.php.backup.TIMESTAMP`
- **Recomendación**: Siempre usa `--backup` en producción

### Modo Dry-Run

El modo `--dry-run` es útil para:
- Ver qué se cambiaría sin aplicar cambios
- Validar estructura de archivos
- Probar antes de ejecutar en producción

---

## 🐛 Solución de Problemas

### Error: "No se encontró: logo.png"

**Causa**: El archivo no existe en el directorio fuente.

**Solución**: Verifica que todos los archivos requeridos estén presentes:
```bash
ls -la public/cd-project/assets/
```

### Error: "cd-system.php tiene errores de sintaxis"

**Causa**: El archivo PHP tiene errores de sintaxis.

**Solución**: 
1. Valida la sintaxis manualmente:
   ```bash
   php -l public/cd-project/assets/cd-system.php
   ```
2. Corrige los errores
3. O usa `--skip-validation` si es necesario (no recomendado)

### Error: "config/cd-system.php no retorna un array válido"

**Causa**: El archivo no retorna un array.

**Solución**: Asegúrate de que el archivo termine con:
```php
return [
    // ... configuración
];
```

### Warning: "Solo se encontraron X assets de Y requeridos"

**Causa**: Faltan algunos archivos requeridos.

**Solución**: 
- Si es intencional, puedes continuar (algunos assets son opcionales)
- Si no, agrega los archivos faltantes

### Los cambios no se aplican

**Causa**: Caché de configuración no limpiado.

**Solución**: 
```bash
php artisan config:clear
php artisan cache:clear
```

---

## 📊 Resumen de Ubicaciones

| Tipo | Origen | Destino |
|------|--------|---------|
| Logo principal | `assets/logo.png` | `public/cd-project/img/logos/logo.png` |
| Logo alternativo | `assets/logo-2.png` | `public/cd-project/img/logos/logo-2.png` |
| Logo footer | `assets/logo-alternative.png` | `public/cd-project/img/logos/logo-alternative.png` |
| Favicon ICO | `assets/favicon.ico` | `public/cd-project/img/favicon/favicon.ico` |
| Favicon SVG | `assets/favicon.svg` | `public/cd-project/img/favicon/favicon.svg` |
| Apple Touch Icon | `assets/apple-touch-icon.png` | `public/cd-project/img/favicon/apple-touch-icon.png` |
| Manifest | `assets/site.webmanifest` | `public/cd-project/img/favicon/site.webmanifest` |
| Skin CSS | `assets/skin-*.css` | `public/template/css/skins/skin-*.css` |
| OG Image | `assets/og-image.png` | `public/cd-project/img/meta-tags/og-image.png` |
| Twitter Image | `assets/twitter-image.png` | `public/cd-project/img/meta-tags/twitter-image.png` |
| Config Sistema | `assets/cd-system.php` | `config/cd-system.php` (merge) |
| Config Sitio | `assets/site.php` | `config/site.php` (merge) |

---

## ✅ Checklist de Actualización

- [ ] Preparar todos los assets requeridos
- [ ] Preparar archivos de configuración PHP (si aplica)
- [ ] Copiar assets a carpeta temporal o directa
- [ ] Ejecutar comando con `--dry-run` para verificar
- [ ] Ejecutar comando con `--backup` para aplicar cambios
- [ ] Limpiar caché de configuración
- [ ] Verificar cambios en el navegador
- [ ] Commitear cambios en Git (si aplica)
- [ ] Limpiar carpeta temporal (si se usó)

---

## 🎯 Mejores Prácticas

1. **Siempre usar `--backup`** en producción
2. **Probar con `--dry-run`** antes de aplicar cambios
3. **Validar sintaxis PHP** antes de ejecutar
4. **Usar valores simples** (strings) en archivos de configuración
5. **Limpiar caché** después de actualizar configuración
6. **Verificar cambios** en el navegador antes de commitear
7. **Documentar cambios** en commits de Git

---

## 📚 Referencias

- [Comandos del Sistema](./COMANDOS-SISTEMA.md)
- [Estructura de Archivos](./05-estructura-archivos.md)
- [Configuración del Sistema](./01-sistema-base.md)

---

**Última actualización**: 2025-01-XX
**Versión del comando**: 2.0.0

