# Proceso de Actualización de Assets del Proyecto

## Comando: `php artisan project:update-assets`

### Descripción
Este comando actualiza los assets del proyecto (logos, favicons, skins CSS) desde una carpeta fuente hacia las ubicaciones finales donde el sistema los utiliza.

---

## Sintaxis del Comando

```bash
php artisan project:update-assets {source_dir} [--project=PROJECT] [--backup]
```

### Parámetros

#### Requerido
- **`source_dir`**: Directorio fuente que contiene los assets a actualizar
  - Ejemplo: `public/cd-project/assets`
  - Debe ser una ruta relativa o absoluta válida

#### Opcionales
- **`--project=PROJECT`**: Nombre del proyecto (solo informativo, por defecto: "default")
- **`--backup`**: Crea un backup de los assets actuales antes de actualizar
  - Los backups se guardan en: `storage/app/backups/assets/{fecha_hora}/`

---

## Assets que Actualiza

### 1. Logos (3 archivos)
- `logo.png` → `public/cd-project/img/logos/logo.png`
- `logo-2.png` → `public/cd-project/img/logos/logo-2.png`
- `logo-alternative.png` → `public/cd-project/img/logos/logo-alternative.png`

### 2. Favicons (5 archivos)
- `favicon.ico` → `public/cd-project/img/favicon/favicon.ico`
- `apple-touch-icon.png` → `public/cd-project/img/favicon/apple-touch-icon.png`
- `favicon.svg` → `public/cd-project/img/favicon/favicon.svg`
- `web-app-manifest-192x192.png` → `public/cd-project/img/favicon/web-app-manifest-192x192.png`
- `web-app-manifest-512x512.png` → `public/cd-project/img/favicon/web-app-manifest-512x512.png`

### 3. Skins CSS (dinámico)
- Busca archivos `skin-*.css` en el directorio fuente
- Los copia a: `public/template/css/skins/{nombre-skin}.css`
- Valida compatibilidad con el demo actual

---

## Proceso Paso a Paso

### 1. Validación Inicial
- Verifica que el directorio fuente existe
- Si se usa `--backup`, crea backup de assets actuales
- Muestra información del proyecto y demo actual

### 2. Actualización de Assets Básicos
Para cada asset requerido:
- Verifica que existe en el directorio fuente
- Crea el directorio destino si no existe
- Copia el archivo desde fuente a destino
- Muestra confirmación o error

### 3. Procesamiento de Skins CSS
- Obtiene el demo y skin actual del sistema
- Busca archivos `skin-*.css` en el directorio fuente
- Copia cada skin encontrado a `public/template/css/skins/`
- Valida compatibilidad del skin con el demo actual
- Muestra información útil sobre gestión de skins

### 4. Validación de Compatibilidad
- Verifica que el skin actual es compatible con el demo
- Muestra advertencias si hay incompatibilidades
- Sugiere el skin recomendado para el demo

---

## Estructura de Directorios

### Directorio Fuente (source_dir)
```
public/cd-project/assets/
├── logo.png
├── logo-2.png
├── logo-alternative.png
├── favicon.ico
├── apple-touch-icon.png
├── favicon.svg
├── web-app-manifest-192x192.png
├── web-app-manifest-512x512.png
└── skin-construction.css (opcional)
```

### Directorios Destino
```
public/cd-project/img/
├── logos/
│   ├── logo.png
│   ├── logo-2.png
│   └── logo-alternative.png
└── favicon/
    ├── favicon.ico
    ├── apple-touch-icon.png
    ├── favicon.svg
    ├── web-app-manifest-192x192.png
    └── web-app-manifest-512x512.png

public/template/css/skins/
└── skin-construction.css
```

---

## Ejemplos de Uso

### Ejemplo 1: Actualización Básica
```bash
php artisan project:update-assets public/cd-project/assets
```

### Ejemplo 2: Con Backup
```bash
php artisan project:update-assets public/cd-project/assets --backup
```

### Ejemplo 3: Con Nombre de Proyecto
```bash
php artisan project:update-assets public/cd-project/assets --project="constructora-gama"
```

### Ejemplo 4: Ruta Absoluta
```bash
php artisan project:update-assets /ruta/absoluta/a/assets --backup
```

---

## Funciones Helper Utilizadas

El comando utiliza las siguientes funciones helper:

- **`get_theme_demo()`**: Obtiene el demo actual configurado
- **`get_theme_skin()`**: Obtiene el skin actual configurado
- **`validate_skin_demo_compatibility($demo, $skin)`**: Valida si un skin es compatible con un demo
- **`get_demo_skin_mapping()`**: Obtiene el mapeo de demos a skins recomendados

---

## Configuración Relacionada

### Archivo: `config/site.php`
Define las rutas de los assets:
```php
'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/demos/construction/logo-dark.png',
    'footer_logo' => 'cd-project/img/logos/logo-alternative.png',
]
```

### Archivo: `config/cd-system.php`
Define las rutas base de personalización:
```php
'customization' => [
    'branding' => [
        'logo_path' => 'cd-project/img/logos/',
        'favicon_path' => 'cd-project/img/favicon/',
        'images_path' => 'cd-project/img/',
    ],
]
```

---

## Comandos Relacionados

- **`php artisan project:manage-skins list`**: Lista todos los skins disponibles
- **`php artisan project:manage-skins validate`**: Valida compatibilidad de skins
- **`php artisan project:copy-porto-skins --list`**: Muestra skins internos de Porto

---

## Notas Importantes

1. **Permisos**: El comando crea directorios con permisos `0755`
2. **Sobrescritura**: Los archivos existentes se sobrescriben sin confirmación
3. **Backup**: Usa `--backup` para crear respaldo antes de actualizar
4. **Skins**: Los skins CSS son opcionales, el comando no falla si no existen
5. **Compatibilidad**: El comando valida pero no fuerza la compatibilidad de skins

---

## Flujo de Trabajo Recomendado

### Para Adaptar un Proyecto a la Identidad de Marca:

1. **Preparar Assets**
   - Colocar todos los assets en `public/cd-project/assets/`
   - Asegurar que los nombres de archivo coincidan exactamente

2. **Crear Backup** (recomendado)
   ```bash
   php artisan project:update-assets public/cd-project/assets --backup
   ```

3. **Verificar Resultados**
   - Revisar que los archivos se copiaron correctamente
   - Verificar en el navegador que los logos se muestran

4. **Validar Skins** (si se actualizaron)
   ```bash
   php artisan project:manage-skins validate
   ```

5. **Limpiar Cache** (si es necesario)
   ```bash
   php artisan cache:clear
   php artisan view:clear
   ```

---

## Troubleshooting

### Error: "El directorio fuente no existe"
- Verificar que la ruta es correcta
- Usar ruta absoluta si hay dudas
- Verificar permisos de lectura

### Error: "No se encontró: {archivo}"
- Verificar que el archivo existe en el directorio fuente
- Verificar que el nombre coincide exactamente (case-sensitive)

### Warning: "Skin no compatible"
- Revisar el mapeo de demos a skins
- Considerar cambiar al skin recomendado
- Verificar configuración en `config/cd-system.php`

---

## Mejoras Futuras Sugeridas

1. Validación de formatos de imagen
2. Optimización automática de imágenes
3. Generación de múltiples tamaños de logos
4. Validación de dimensiones de favicons
5. Preview de assets antes de actualizar
6. Rollback automático en caso de error

