# 🚀 Guía: Crear un Nuevo Proyecto desde CD-System

## 🎯 Objetivo

Crear un nuevo repositorio con la rama `cd-system` clonada desde el repositorio central, configurado correctamente con protección automática de archivos del sistema.

---

## 📋 Requisitos Previos

- [ ] Repositorio Git creado en GitHub (puede estar vacío)
- [ ] Git configurado en tu máquina
- [ ] Acceso al repositorio `LACOMPANIADIGITAL/cd-system`
- [ ] Acceso al directorio de trabajo (ej: `/Applications/XAMPP/xamppfiles/htdocs/`)

---

## 🔄 Proceso Completo

### Paso 1: Crear el Repositorio en GitHub

1. Ve a GitHub y crea un nuevo repositorio:
   - **Nombre**: `nombre-del-proyecto` (ej: `pedroweb`, `cokecolombres`)
   - **Visibilidad**: Privado o Público (según corresponda)
   - **Inicialización**: Puede estar vacío o con README (no importa, lo sobrescribiremos)

2. **Copia la URL del repositorio**:
   ```
   https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git
   ```

---

### Paso 2: Crear el Proyecto (Método Automatizado - Recomendado)

**Opción A: Script Completo Automatizado (Recomendado)**

Desde el repositorio `cd-system`, ejecuta el script que automatiza todo:

```bash
# Desde el directorio cd-system
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system

# (Opcional) Si los scripts no tienen permisos, configurarlos primero:
chmod +x scripts/*.sh
# O ejecutar:
./scripts/fix-permissions.sh

# Ejecutar el script
./scripts/create-new-project.sh
```

El script te pedirá:
1. **Nombre del proyecto** (ej: `pedroweb`, `cokecolombres`)
2. **URL del repositorio** (opcional, usa default si presionas Enter)

Y automáticamente:
- ✅ Crea el directorio del proyecto
- ✅ Inicializa el repositorio Git
- ✅ Configura el remote origin
- ✅ Ejecuta el clonado de CD-System
- ✅ Verifica que todo esté correcto

---

### Paso 2 (Alternativo): Preparar Manualmente

Si prefieres hacerlo manualmente:

```bash
# 1. Ir al directorio padre donde quieres crear el proyecto
cd /Applications/XAMPP/xamppfiles/htdocs

# 2. Crear el directorio del proyecto
mkdir nombre-del-proyecto
cd nombre-del-proyecto

# 3. Inicializar repositorio Git
git init

# 4. Configurar el remote origin
git remote add origin https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git
```

---

### Paso 3: Clonar CD-System usando el Script

**Si usaste el método automatizado (Paso 2A)**, este paso ya está completo. ✅

**Si usaste el método manual (Paso 2B)**, ejecuta:

```bash
# Desde el directorio del proyecto, ejecutar el script directamente
../cd-system/scripts/clone-to-new-repo.sh https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git
```

#### ¿Qué hace el script automáticamente?

El script realiza los siguientes pasos:

1. ✅ **Descarga la rama `cd-system`** desde el repositorio central
2. ✅ **Crea la rama local `cd-system`** con todo el código y historial
3. ✅ **Configura los remotes** correctamente (origin → proyecto, temporal → cd-system)
4. ✅ **Verifica y corrige `.gitattributes`** automáticamente si falta `merge=ours`
5. ✅ **Valida archivos críticos** del sistema (config/cd-system.php, config/site.php, assets)
6. ✅ **Limpia remotes temporales** al finalizar

---

### Paso 4: Verificar el Estado Final

Después de ejecutar el script, verifica que todo esté correcto:

```bash
# Verificar que estás en la rama cd-system
git branch
# Deberías ver: * cd-system

# Verificar remotes
git remote -v
# Deberías ver:
# origin  https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git (fetch)
# origin  https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git (push)

# Verificar que .gitattributes tenga protecciones
grep -c "merge=ours" .gitattributes
# Deberías ver un número mayor a 0 (típicamente 11)

# Verificar archivos críticos
ls -la config/cd-system.php config/site.php public/cd-project/assets/logo.png
# Todos deberían existir
```

---

### Paso 5: Push Inicial al Repositorio

Una vez verificado, sube la rama al repositorio remoto:

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

Esto subirá:
- ✅ Toda la rama `cd-system` con el historial completo
- ✅ El commit de protección de archivos (si fue necesario)
- ✅ Todos los archivos del sistema base

---

## ✅ Estado Final Esperado

Después de completar todos los pasos, deberías tener:

- [x] Repositorio creado en GitHub
- [x] Rama `cd-system` clonada localmente
- [x] Remote `origin` configurado correctamente
- [x] `.gitattributes` presente con protecciones (`merge=ours`)
- [x] Archivos críticos presentes:
  - [x] `config/cd-system.php`
  - [x] `config/site.php`
  - [x] `public/cd-project/assets/logo.png`
- [x] Push realizado a GitHub
- [x] Rama `cd-system` visible en GitHub

---

## 🔒 Protección de Archivos

Una vez configurado, los siguientes archivos **NO serán sobrescritos** durante merges futuros desde el core:

- ✅ `config/cd-system.php` - Configuración base del sistema
- ✅ `config/site.php` - Configuración del sitio (identidad del proyecto)
- ✅ `public/cd-project/assets/*` - Assets de identidad del proyecto

Esto se logra automáticamente gracias a `.gitattributes` con la estrategia `merge=ours`.

**Nota**: El script ahora corrige automáticamente el `.gitattributes` si detecta que falta la configuración de protección.

---

## 📝 Próximos Pasos

Una vez completado el clonado y push:

### 1. Configurar el Proyecto

```bash
# Instalar dependencias
composer install

# Configurar entorno
cp .env.example .env
php artisan key:generate

# Configurar base de datos en .env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=nombre_base_datos
# DB_USERNAME=usuario
# DB_PASSWORD=password
```

### 2. Personalizar la Identidad del Proyecto

- **Editar `config/site.php`** con información del proyecto:
  - Nombre del proyecto
  - URLs y contactos
  - Configuración de SEO
  - Redes sociales

- **Reemplazar assets** en `public/cd-project/assets/`:
  - `logo.png` - Logo principal
  - `logo-2.png` - Logo alternativo
  - `logo-alternative.png` - Logo para footer
  - `favicon.ico`, `favicon.svg` - Favicons
  - `apple-touch-icon.png` - Icono para Apple
  - `web-app-manifest-*.png` - Iconos para PWA

### 3. Configurar Base de Datos

```bash
# Ejecutar migraciones
php artisan migrate

# (Opcional) Ejecutar seeders
php artisan db:seed
```

---

## 🆘 Solución de Problemas

### Error: "La rama cd-system ya existe"

Si el script detecta que la rama ya existe:
- El script te preguntará si deseas sobrescribirla
- Responde `y` para continuar
- El script cambiará automáticamente a otra rama antes de eliminar

### Error: ".gitattributes no tiene protecciones"

**Ya no debería ocurrir** - El script ahora corrige esto automáticamente. Si aún ocurre:

```bash
# Copiar manualmente desde cd-system
cp ../cd-system/.gitattributes .
git add .gitattributes
git commit -m "chore: Agregar protección de archivos del sistema"
```

### Error: "No se puede hacer push"

Verifica:
- Que tengas permisos en el repositorio de GitHub
- Que el remote `origin` esté correctamente configurado
- Que tengas conexión a internet
- Que la rama `cd-system` exista localmente

---

## 📚 Referencias

- [Protección de Archivos del Sistema](../cd-system/proteccion-archivos-sistema.md)
- [Flujo de Cambios Core ↔ Proyectos](../cd-system/flujo-cambios-core-proyectos.md)
- [Propagación de Mejoras del Core](../cd-system/propagacion-mejoras-core.md)

---

## 💡 Notas Importantes

1. **El script debe ejecutarse desde el directorio del nuevo proyecto**, no desde cd-system
2. **El repositorio puede estar vacío o con contenido**, el script lo manejará
3. **La rama siempre se llama `cd-system`**, esto es intencional para mantener consistencia
4. **Los archivos protegidos mantendrán la identidad del proyecto** durante futuros merges desde el core
5. **El script ahora corrige automáticamente `.gitattributes`** si detecta problemas

---

## 🎉 ¡Listo!

Una vez completado este proceso, tendrás:

- ✅ Un nuevo repositorio con CD-System completo
- ✅ Protección automática de archivos del sistema configurada
- ✅ Rama `cd-system` lista para desarrollo
- ✅ Listo para personalizar y desarrollar tu proyecto

---

## 📋 Checklist Rápido

### Método Automatizado (Recomendado)

```bash
# 1. Crear repo en GitHub
# 2. Desde cd-system, ejecutar script automatizado
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
./scripts/create-new-project.sh
# Ingresar nombre del proyecto cuando se solicite

# 3. Verificar
cd ../nombre-del-proyecto
git branch          # Debe mostrar: * cd-system
grep -c "merge=ours" .gitattributes  # Debe ser > 0

# 4. Push (opcional)
git push -u origin cd-system

# 5. Configurar proyecto
composer install
cp .env.example .env
php artisan key:generate
```

### Método Manual

```bash
# 1. Crear repo en GitHub
# 2. Preparar directorio local
mkdir proyecto && cd proyecto
git init
git remote add origin https://github.com/LACOMPANIADIGITAL/proyecto.git

# 3. Clonar CD-System
../cd-system/scripts/clone-to-new-repo.sh https://github.com/LACOMPANIADIGITAL/proyecto.git

# 4. Verificar
git branch          # Debe mostrar: * cd-system
grep -c "merge=ours" .gitattributes  # Debe ser > 0

# 5. Push
git push -u origin cd-system

# 6. Configurar proyecto
composer install
cp .env.example .env
php artisan key:generate
```

---

**Última actualización**: Script mejorado con corrección automática de `.gitattributes`

