# 🚀 Proceso Optimizado Completo: Crear Proyecto con Identidad

## 📋 Resumen

Proceso completamente automatizado para crear un proyecto desde cero con:
- ✅ Sistema clonado desde CD-System
- ✅ Configuración completa (composer, .env, migraciones)
- ✅ Identidad personalizada (config/site.php, assets)
- ✅ Todo listo para desarrollo

---

## 🎯 Proceso en 3 Pasos

### Paso 1: Crear Repositorio en GitHub

1. Crear repositorio en GitHub (puede estar vacío)
2. Copiar URL del repositorio

### Paso 2: Preparar JSON

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
cp scripts/project-config.example.json mi-proyecto.json
# Editar mi-proyecto.json con tus datos
```

### Paso 3: Ejecutar Script

```bash
./scripts/create-complete-project.sh mi-proyecto.json
```

**¡Eso es todo!** El script hace todo automáticamente.

---

## 📄 Estructura del JSON

### Opción A: Con Assets Preparados (Recomendado) ⭐

```json
{
  "project": {
    "name": "nombre-del-proyecto",
    "repository_url": "https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git"
  },
  "identity": {
    "site_name": "Nombre del Sitio",
    "site_url": "www.miempresa.com",
    "contact_email": "contacto@miempresa.com"
  },
  "assets": {
    "has_assets": true,
    "assets_path": "/ruta/absoluta/a/tus/assets",
    "update_assets": true,
    "create_backup": true,
    "auto_detect": false
  }
}
```

**Importante**: 
- Prepara assets ANTES de ejecutar el script
- Usa ruta **absoluta** (completa) en `assets_path`
- El script copiará y actualizará automáticamente

### Opción B: Sin Assets (Actualizar Después)

```json
{
  "assets": {
    "has_assets": false,
    "auto_detect": false
  }
}
```

Luego actualiza con: `./scripts/update-project-assets.sh`

---

## ✅ Lo que el Script Hace Automáticamente

### FASE 1: Recopilar Información
- Lee configuración desde JSON
- Valida campos requeridos
- Aplica valores por defecto inteligentes

### FASE 2: Crear Proyecto
- ✅ Crea directorio del proyecto
- ✅ Inicializa repositorio Git
- ✅ Configura remote origin
- ✅ **Clona rama `cd-system`** (usa directorio local si existe, más rápido)
  - Detecta automáticamente si existe `cd-system` local
  - Usa directorio local si está disponible (instantáneo, sin internet)
  - Usa GitHub como fallback si no existe local
- ✅ Configura `.gitattributes` con protecciones (`merge=ours`)
- ✅ Verifica archivos críticos

### FASE 3: Configurar Proyecto
- ✅ Instala dependencias (`composer install`)
- ✅ Crea `.env` desde `.env.example`
- ✅ Configura variables de entorno:
  - `APP_NAME`
  - `DB_DATABASE`
  - `DB_USERNAME` / `DB_PASSWORD` (si es cPanel)
  - `GOOGLE_ANALYTICS_ID` (si es cPanel)
- ✅ Genera `APP_KEY`
- ✅ Ejecuta migraciones (`migrate:fresh --seed`)
- ✅ Crea symlink de storage

### FASE 4: Personalizar Identidad
- ✅ **Actualiza `config/site.php`**:
  - Nombre del sitio
  - URL del sitio
  - Email de contacto
  - Descripción SEO
  - Autor
  - Títulos OG y Twitter
- ✅ **Copia assets desde ruta externa** (si `has_assets: true`):
  - Copia desde ruta absoluta especificada en JSON
  - Copia a `public/cd-project/assets/`
- ✅ **Actualiza assets en ubicaciones finales**:
  - Logos → `public/cd-project/img/logos/`
  - Favicons → `public/cd-project/img/favicon/`
  - Skins CSS → `public/template/css/skins/`
- ✅ Crea backup automático de assets

### FASE 5: Verificación Final
- ✅ Verifica rama `cd-system` activa
- ✅ Verifica `.gitattributes` con protecciones
- ✅ Verifica archivos críticos presentes

---

## 🔧 Mejoras Implementadas

### 1. Comando Automático de Personalización

El script ahora:
- Verifica si el comando `project:customize-identity` existe
- Si no existe, lo copia automáticamente desde cd-system
- Lo registra en `Kernel.php`
- Si aún falla, usa método alternativo con `sed`

### 2. Actualización Robusta de `config/site.php`

El comando `project:customize-identity` actualiza:
- `name` - Nombre del sitio
- `url` - URL del sitio
- `author` - Autor del proyecto
- `seo.description` - Descripción SEO
- `contact.email` - Email de contacto
- `og.title` - Título Open Graph
- `twitter.title` - Título Twitter
- `assets.main_logo_alt` - Alt del logo

### 3. Manejo Inteligente de Assets

- Detecta si hay assets proporcionados
- Normaliza rutas (relativas/absolutas)
- Crea backup automático
- Valida compatibilidad de skins

---

## 📝 Ejemplo Completo

### 1. Crear JSON

```json
{
  "project": {
    "name": "mirage",
    "repository_url": "https://github.com/LACOMPANIADIGITAL/mirage.git",
    "database": {
      "name": "bewpro-mirage",
      "is_cpanel": false
    }
  },
  "identity": {
    "site_name": "Mirage",
    "site_url": "www.mirage.com",
    "contact_email": "contacto@mirage.com",
    "seo_description": "Descripción SEO del sitio web de Mirage",
    "author": "Mirage"
  },
  "assets": {
    "has_assets": false
  }
}
```

### 2. Ejecutar

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
./scripts/create-complete-project.sh mirage.json
```

### 3. Resultado

Proyecto completamente configurado y personalizado:
- ✅ Sistema clonado
- ✅ Base de datos configurada y seedeada
- ✅ Identidad personalizada en `config/site.php`
- ✅ Listo para desarrollo

---

## 🎯 Estado Final del Proyecto

Después de ejecutar el script, tendrás:

- [x] Repositorio en GitHub creado
- [x] Rama `cd-system` clonada localmente
- [x] `.gitattributes` con 11 protecciones configuradas
- [x] Dependencias instaladas
- [x] `.env` configurado
- [x] `APP_KEY` generado
- [x] Base de datos migrada y seedeada
- [x] `config/site.php` personalizado con identidad del proyecto
- [x] Assets actualizados (si se proporcionaron)
- [x] Comando `project:customize-identity` disponible
- [x] Comando `project:update-assets` disponible
- [x] Proyecto funcionando (`php artisan serve`)

---

## 🚀 Próximos Pasos Después de la Creación

### 1. Verificar Personalización

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/nombre-proyecto

# Verificar config/site.php
grep -A 2 "'name' =>" config/site.php
# Debe mostrar: 'name' => 'Nombre del Sitio'

# Verificar email
grep "'email' =>" config/site.php
# Debe mostrar: 'email' => 'contacto@miempresa.com'
```

### 2. Actualizar Assets (si no se hicieron antes)

```bash
# Colocar assets en public/cd-project/assets/
php artisan project:update-assets public/cd-project/assets --backup --project="nombre-proyecto"
```

### 3. Push Inicial (opcional)

```bash
git push -u origin cd-system
```

### 4. Iniciar Desarrollo

```bash
php artisan serve
# Acceder a: http://127.0.0.1:8000
```

---

## 🔄 Flujo Completo Visualizado

```
GitHub Repo (vacío)
    ↓
JSON Config (completo)
    ↓
./create-complete-project.sh mi-proyecto.json
    ↓
┌─────────────────────────────────────┐
│ FASE 1: Recopilar Info (JSON)      │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│ FASE 2: Crear Proyecto              │
│ - Clonar CD-System                  │
│ - Configurar Git                    │
│ - Protecciones .gitattributes       │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│ FASE 3: Configurar Proyecto         │
│ - composer install                  │
│ - .env setup                        │
│ - Migraciones + Seeders             │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│ FASE 4: Personalizar Identidad      │
│ - config/site.php (automático)     │
│ - Assets (si proporcionados)       │
└─────────────────────────────────────┘
    ↓
┌─────────────────────────────────────┐
│ FASE 5: Verificación                │
│ - Rama, .gitattributes, archivos    │
└─────────────────────────────────────┘
    ↓
✅ Proyecto Listo para Desarrollo
```

---

## 🆘 Solución de Problemas

### El comando `project:customize-identity` no existe

**Solución automática**: El script ahora lo copia automáticamente desde cd-system.

Si falla manualmente:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/nombre-proyecto
cp ../cd-system/app/Console/Commands/CustomizeProjectIdentity.php app/Console/Commands/

# Editar app/Console/Kernel.php y agregar:
# Commands\CustomizeProjectIdentity::class,
```

### `config/site.php` no se actualiza

El script tiene método alternativo con `sed` que funciona siempre. Si aún falla:

```bash
# Editar manualmente
nano config/site.php
```

### Assets no se actualizan

Verificar que los archivos estén en la carpeta correcta:
```bash
ls -la public/cd-project/assets/
# Debe mostrar: logo.png, favicon.ico, etc.
```

---

## 📚 Referencias

- [Guía: Crear Nuevo Proyecto](./new-project.md)
- [Uso de JSON para Configuración](./uso-json-config.md)
- [Guía Completa: Crear Proyecto](./guia-completa-crear-proyecto.md)
- [Proceso de Actualización de Assets](../cd-project/asset-update-process.md)

---

**Última actualización**: Proceso completamente optimizado y automatizado

