# 📋 Análisis: Agregar Demo Product Landing

## 🎯 Objetivo
Agregar el demo `demo-product-landing` al sistema CD-System para que sea seleccionable desde la configuración.

---

## ✅ Estado Actual: Lo que YA existe

### 1. Archivos CSS y JS Base (de Porto)
- ✅ `public/template/css/demos/demo-product-landing.css` - **EXISTE**
- ✅ `public/template/css/skins/skin-product-landing.css` - **EXISTE**
- ✅ `public/template/js/demos/demo-product-landing.js` - **EXISTE**

### 2. Configuración Básica
- ✅ `config/cd-system.php` - Línea 65: `'demo' => 'demo-product-landing'` - **CONFIGURADO**
- ✅ `app/helpers.php` - Línea 670: Skin mapping `'demo-product-landing' => 'skin-product-landing'` - **CONFIGURADO**

---

## ❌ Lo que FALTA por crear/adaptar

### 1. Configuración en Helpers (5 min)
**Archivo:** `app/helpers.php`

**Falta agregar en `get_demo_layout_mapping()`:**
```php
'demo-product-landing' => [
    'header' => 'demo-product-landing',
    'footer' => 'demo-product-landing',
    'sidebar' => 'default',
    'description' => 'Template para landing pages de productos',
    'features' => ['product-showcase', 'features', 'pricing', 'testimonials', 'cta'],
    'extensions' => [
        'js' => true,  // Tiene JS base de Porto (demo-product-landing.js)
        'css' => false, // No tiene CSS custom
    ],
],
```

---

### 2. Vistas Blade - Header (1-2 horas)
**Archivo:** `resources/views/layout/front/headers/demo-product-landing.blade.php`

**Fuente:** HTML original de Porto: `demo-product-landing.html` (sección `<header>`)

**Adaptaciones necesarias:**
- [ ] Logo dinámico: `{{ asset(config('site.assets.main_logo')) }}`
- [ ] Navegación dinámica: `@php $navigation = get_dynamic_navigation('header'); @endphp`
- [ ] Rutas HTML → `route()` (ver [RUTAS-ESTANDAR-DEMOS.md](RUTAS-ESTANDAR-DEMOS.md))
- [ ] Assets → `asset()`
- [ ] Textos estáticos → `__()`
- [ ] Datos de contacto dinámicos: `config('site.contact.phone')`, `config('site.contact.email')`

**Referencia:** Ver `resources/views/layout/front/headers/demo-architecture-2.blade.php` como ejemplo

---

### 3. Vistas Blade - Footer (1-2 horas)
**Archivo:** `resources/views/layout/front/footers/demo-product-landing.blade.php`

**Fuente:** HTML original de Porto: `demo-product-landing.html` (sección `<footer>`)

**Adaptaciones necesarias:**
- [ ] Logo dinámico: `{{ asset(config('site.assets.footer_logo', config('site.assets.main_logo'))) }}`
- [ ] Navegación dinámica: `get_dynamic_navigation('footer')`
- [ ] Contacto dinámico: `config('site.contact.*')`
- [ ] Redes sociales: `@foreach(config('site.social_media') as $key => $social)`
- [ ] Newsletter: `route('front.newsletter.subscribe')` (si aplica)
- [ ] Rutas HTML → `route()`
- [ ] Assets → `asset()`
- [ ] Textos → `__()`
- [ ] Manejo seguro de Collections: `($recentPosts ?? collect())->take(9)`

**Referencia:** Ver `resources/views/layout/front/footers/demo-architecture-2.blade.php` como ejemplo

---

### 4. Vistas Blade - Welcome (Página Principal) - OBLIGATORIA (2-3 horas)
**Archivo:** `resources/views/modules/cd-base/frontend/demos/demo-product-landing/welcome.blade.php`

**Fuente:** HTML original de Porto: `demo-product-landing.html` (sección `<div role="main" class="main">`)

**Adaptaciones necesarias:**
- [ ] Extender layout: `@extends('layout.front.master')`
- [ ] Rutas HTML → `route()` (⚠️ IMPORTANTE: Ver [RUTAS-ESTANDAR-DEMOS.md](RUTAS-ESTANDAR-DEMOS.md))
- [ ] Assets → `asset()`
- [ ] Textos estáticos → `__()`
- [ ] Integrar módulos: `@if(is_module_active('services'))`, `@if(is_module_active('products'))`, etc.
- [ ] Datos dinámicos:
  - `$services` (si módulo activo)
  - `$products` (si módulo activo)
  - `$featuredProjects` (si módulo activo)w
  - `$recentPosts` (si módulo activo)
  - `$featuredReferences` (si módulo activo)
  - `$teamMembers` (si módulo activo)
- [ ] Imágenes con fallbacks: `{{ asset($product->featured_image ?? "cd-project/img/demos/product-landing/products/product-" . ($index + 1) . ".jpg") }}`

**Referencia:** Ver `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/welcome.blade.php` como ejemplo

---

### 5. Vistas Blade - About (Quiénes Somos) - OBLIGATORIA (1-2 horas)
**Archivo:** `resources/views/modules/cd-base/frontend/demos/demo-product-landing/about.blade.php`

**Fuente:** HTML original de Porto: `demo-product-landing-about-us.html` (si existe) o sección "About" del HTML principal

**Adaptaciones necesarias:**
- [ ] Mismas que welcome
- [ ] Breadcrumbs: `route('front.homepage')`, `route('front.about')`
- [ ] Secciones específicas del demo

**Referencia:** Ver `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/about.blade.php` como ejemplo

---

### 6. Vistas Blade - Contact (Contacto) - OBLIGATORIA (1-2 horas)
**Archivo:** `resources/views/modules/cd-base/frontend/demos/demo-product-landing/contact.blade.php`

**Fuente:** HTML original de Porto: `demo-product-landing-contact-us.html` (si existe) o sección "Contact" del HTML principal

**Adaptaciones necesarias:**
- [ ] Mismas que welcome
- [ ] Formulario de contacto: `route('front.contact.store')`
- [ ] Google Maps (si aplica)
- [ ] Información de contacto dinámica: `config('site.contact.*')`

**Referencia:** Ver `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/contact.blade.php` como ejemplo

---

### 7. Assets/Imágenes del Demo (30 min - 1 hora)
**Directorio:** `public/cd-project/img/demos/product-landing/`

**Pasos:**
1. [ ] Identificar todas las referencias de imágenes en el HTML original
2. [ ] Verificar si existen en Porto: `img/demos/product-landing/`
3. [ ] Copiar imágenes desde Porto o buscar alternativas en otros demos
4. [ ] Crear estructura de carpetas si es necesario:
   ```bash
   mkdir -p public/cd-project/img/demos/product-landing/{svg,services,concept,products,backgrounds,generic,logos,team,blog,icons}
   ```

**Verificación:**
```bash
# Usar script de verificación (si existe)
./scripts/verify-demo-images.sh demo-product-landing
```

---

## 📐 Estructura de Archivos Requerida

### Archivos que YA existen ✅
```
✅ public/template/css/demos/demo-product-landing.css
✅ public/template/css/skins/skin-product-landing.css
✅ public/template/js/demos/demo-product-landing.js
✅ Configuración en config/cd-system.php
✅ Skin mapping en app/helpers.php
```

### Archivos que FALTAN crear ❌
```
❌ resources/views/layout/front/headers/demo-product-landing.blade.php
❌ resources/views/layout/front/footers/demo-product-landing.blade.php
❌ resources/views/modules/cd-base/frontend/demos/demo-product-landing/welcome.blade.php
❌ resources/views/modules/cd-base/frontend/demos/demo-product-landing/about.blade.php
❌ resources/views/modules/cd-base/frontend/demos/demo-product-landing/contact.blade.php
❌ public/cd-project/img/demos/product-landing/ (carpeta con imágenes)
❌ Layout mapping en app/helpers.php (get_demo_layout_mapping)
```

---

## 🚀 Plan de Acción - Pasos a Seguir

### FASE 1: Preparación y Análisis (30 min)
1. [ ] Localizar HTML original de Porto: `demo-product-landing.html`
2. [ ] Revisar estructura del HTML (header, footer, contenido)
3. [ ] Identificar todas las referencias de imágenes
4. [ ] Documentar funcionalidades especiales del demo

### FASE 2: Configuración (5 min)
1. [ ] Agregar layout mapping en `app/helpers.php` → `get_demo_layout_mapping()`

### FASE 3: Assets (30 min - 1 hora)
1. [ ] Copiar imágenes desde Porto o buscar alternativas
2. [ ] Verificar que todas las imágenes referenciadas existan
3. [ ] Organizar en estructura de carpetas

### FASE 4: Vistas Blade (5-8 horas)
1. [ ] Crear y adaptar header (`demo-product-landing.blade.php`)
2. [ ] Crear y adaptar footer (`demo-product-landing.blade.php`)
3. [ ] Crear y adaptar welcome (`welcome.blade.php`)
4. [ ] Crear y adaptar about (`about.blade.php`)
5. [ ] Crear y adaptar contact (`contact.blade.php`)

### FASE 5: Validación (30 min)
1. [ ] Verificar rutas (usar [RUTAS-ESTANDAR-DEMOS.md](RUTAS-ESTANDAR-DEMOS.md))
2. [ ] Verificar imágenes (script de verificación)
3. [ ] Probar en navegador (todas las páginas)
4. [ ] Verificar responsive
5. [ ] Verificar carga de assets (CSS, JS, imágenes)

---

## 📚 Documentación de Referencia

### Guías Principales:
- [GUIA-COMPLETA-ADAPTACION-DEMOS.md](GUIA-COMPLETA-ADAPTACION-DEMOS.md) - Guía exhaustiva completa
- [GUIA-RAPIDA-NUEVOS-DEMOS.md](GUIA-RAPIDA-NUEVOS-DEMOS.md) - Guía rápida paso a paso
- [RUTAS-ESTANDAR-DEMOS.md](RUTAS-ESTANDAR-DEMOS.md) - ⚠️ CRÍTICO: Rutas correctas a usar

### Ejemplos de Referencia:
- `resources/views/layout/front/headers/demo-architecture-2.blade.php`
- `resources/views/layout/front/footers/demo-architecture-2.blade.php`
- `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/welcome.blade.php`
- `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/about.blade.php`
- `resources/views/modules/cd-base/frontend/demos/demo-architecture-2/contact.blade.php`

---

## ⚠️ Puntos Críticos a Considerar

### 1. Rutas Estándar
**⚠️ IMPORTANTE:** Consultar [RUTAS-ESTANDAR-DEMOS.md](RUTAS-ESTANDAR-DEMOS.md) antes de adaptar cualquier ruta para evitar errores como `RouteNotFoundException`.

**Rutas correctas:**
- ✅ `route('frontend.services.detail', $slug)` (NO `show`)
- ✅ `route('frontend.projects.show', $slug)`
- ✅ `route('blog.post', $slug)` (NO `frontend.blog.show`)
- ✅ `route('frontend.news.show', $slug)`
- ✅ `route('front.homepage')`, `route('front.about')`, `route('front.contact')`

### 2. Manejo de Variables
- Usar manejo seguro: `($variable ?? collect())`
- Para arrays: usar `array_slice($array, 0, 3, true)` en lugar de `->take(3)`

### 3. Imágenes con Fallbacks
- Siempre proporcionar fallbacks para imágenes dinámicas
- Usar `asset()` para todas las rutas de imágenes

### 4. Integración de Módulos
- Usar `@if(is_module_active('module-name'))` para mostrar contenido condicionalmente
- Proporcionar contenido de ejemplo cuando los módulos no están activos

---

## ✅ Checklist Final

Antes de considerar el demo completo:

- [ ] Layout mapping agregado en `helpers.php`
- [ ] Header Blade creado y adaptado
- [ ] Footer Blade creado y adaptado
- [ ] Welcome Blade creado y adaptado
- [ ] About Blade creado y adaptado
- [ ] Contact Blade creado y adaptado
- [ ] Todas las imágenes copiadas y verificadas
- [ ] Rutas verificadas (todas correctas)
- [ ] Variables verificadas (manejo seguro)
- [ ] Probado en navegador (todas las páginas funcionan)
- [ ] Responsive verificado
- [ ] Assets cargando correctamente

---

## 📊 Tiempo Estimado Total

- **FASE 1 (Preparación):** 30 min
- **FASE 2 (Configuración):** 5 min
- **FASE 3 (Assets):** 30 min - 1 hora
- **FASE 4 (Vistas Blade):** 5-8 horas
- **FASE 5 (Validación):** 30 min

**Total estimado:** 7-11 horas

---

**Última actualización:** {{ date('Y-m-d') }}  
**Versión:** 1.0  
**Estado:** 📋 Análisis Completo - Listo para Implementación
