# 📄 Uso de Archivo JSON para Crear Proyectos

## 🎯 Objetivo

Permite crear proyectos completos de forma no interactiva usando un archivo JSON de configuración.

---

## 📋 Estructura del Archivo JSON

### Archivo de Ejemplo

Copia `scripts/project-config.example.json` y personalízalo:

```bash
cp scripts/project-config.example.json mi-proyecto-config.json
```

### Estructura Completa

```json
{
  "project": {
    "name": "nombre-del-proyecto",
    "repository_url": "https://github.com/LACOMPANIADIGITAL/nombre-del-proyecto.git",
    "database": {
      "name": "bewpro-nombre-del-proyecto",
      "is_cpanel": false,
      "username": "",
      "password": "",
      "google_analytics_id": ""
    }
  },
  "identity": {
    "site_name": "Nombre del Sitio",
    "site_url": "www.miempresa.com",
    "contact_email": "contacto@miempresa.com",
    "seo_description": "Descripción SEO del sitio web",
    "author": "Nombre del Autor"
  },
  "assets": {
    "has_assets": false,
    "assets_path": "public/cd-project/assets",
    "update_assets": true,
    "create_backup": true
  },
  "options": {
    "skip_push": false,
    "skip_verification": false,
    "verbose": true
  }
}
```

---

## 📝 Campos Detallados

### `project` (Requerido)

- **`name`** (requerido): Nombre del proyecto (solo letras, números, guiones y guiones bajos)
- **`repository_url`** (opcional): URL del repositorio en GitHub. Si no se especifica, usa: `https://github.com/LACOMPANIADIGITAL/{name}.git`
- **`database`**:
  - **`name`** (opcional): Nombre de la base de datos. Default: `bewpro-{name}`
  - **`is_cpanel`** (opcional): `true` o `false`. Default: `false`
  - **`username`** (opcional): Usuario de BD (solo si `is_cpanel: true`)
  - **`password`** (opcional): Contraseña de BD (solo si `is_cpanel: true`)
  - **`google_analytics_id`** (opcional): ID de Google Analytics (solo si `is_cpanel: true`)

### `identity` (Opcional)

- **`site_name`** (opcional): Nombre del sitio. Default: `{project.name}`
- **`site_url`** (opcional): URL del sitio. Default: `www.{project.name}.com`
- **`contact_email`** (opcional): Email de contacto. Default: `contacto@{project.name}.com`
- **`seo_description`** (opcional): Descripción SEO. Default: `Sitio web de {site_name}`
- **`author`** (opcional): Autor del proyecto. Default: `{site_name}`

### `assets` (Opcional)

- **`has_assets`** (opcional): `true` o `false`. Si hay assets listos. Default: `false`
- **`assets_path`** (opcional): Ruta a la carpeta con assets. Default: `public/cd-project/assets`
  - Puede ser ruta relativa (desde el proyecto) o absoluta
- **`update_assets`** (opcional): `true` o `false`. Si actualizar assets automáticamente. Default: `true`
- **`create_backup`** (opcional): `true` o `false`. Si crear backup antes de actualizar. Default: `true`

### `options` (Opcional)

- **`skip_push`** (opcional): `true` o `false`. Si omitir instrucciones de push. Default: `false`
- **`skip_verification`** (opcional): `true` o `false`. Si omitir verificación final. Default: `false`
- **`verbose`** (opcional): `true` o `false`. Si mostrar output detallado. Default: `true`

---

## 🚀 Uso

### Requisito: Instalar `jq`

El script requiere `jq` para parsear JSON:

```bash
# macOS
brew install jq

# Linux (Debian/Ubuntu)
sudo apt-get install jq

# Linux (RedHat/CentOS)
sudo yum install jq
```

### Ejecutar con JSON

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

### Ejemplo Completo

1. **Crear archivo de configuración:**

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system
cp scripts/project-config.example.json mi-proyecto.json
```

2. **Editar el archivo:**

```json
{
  "project": {
    "name": "terashe",
    "repository_url": "https://github.com/LACOMPANIADIGITAL/terashe.git",
    "database": {
      "name": "bewpro-terashe",
      "is_cpanel": false
    }
  },
  "identity": {
    "site_name": "Terashe",
    "site_url": "www.terashe.com",
    "contact_email": "contacto@terashe.com",
    "seo_description": "Sitio web de Terashe",
    "author": "Terashe"
  },
  "assets": {
    "has_assets": true,
    "assets_path": "/ruta/a/mis/assets",
    "update_assets": true,
    "create_backup": true
  }
}
```

3. **Ejecutar:**

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

---

## 📊 Ejemplos de Uso

### Ejemplo 1: Proyecto Básico (Sin cPanel)

```json
{
  "project": {
    "name": "mi-proyecto",
    "database": {
      "name": "bewpro-mi-proyecto",
      "is_cpanel": false
    }
  },
  "identity": {
    "site_name": "Mi Proyecto",
    "site_url": "www.miproyecto.com"
  }
}
```

### Ejemplo 2: Proyecto con cPanel

```json
{
  "project": {
    "name": "mi-proyecto",
    "database": {
      "name": "bewpro_mi_proyecto",
      "is_cpanel": true,
      "username": "usuario_bd",
      "password": "password_seguro",
      "google_analytics_id": "UA-XXXXX-Y"
    }
  },
  "identity": {
    "site_name": "Mi Proyecto",
    "site_url": "www.miproyecto.com",
    "contact_email": "info@miproyecto.com"
  }
}
```

### Ejemplo 3: Proyecto con Assets

```json
{
  "project": {
    "name": "mi-proyecto"
  },
  "identity": {
    "site_name": "Mi Proyecto",
    "site_url": "www.miproyecto.com"
  },
  "assets": {
    "has_assets": true,
    "assets_path": "/Users/miusuario/Downloads/assets-proyecto",
    "update_assets": true,
    "create_backup": true
  }
}
```

### Ejemplo 4: Proyecto Mínimo (Solo nombre)

```json
{
  "project": {
    "name": "mi-proyecto"
  }
}
```

Todos los demás campos usarán valores por defecto.

---

## ✅ Ventajas del Modo JSON

1. **No interactivo**: Ejecuta todo automáticamente sin preguntas
2. **Reproducible**: Mismo archivo JSON = mismo resultado
3. **Versionable**: Puedes guardar configuraciones en Git
4. **Automatizable**: Fácil de integrar en CI/CD
5. **Reutilizable**: Mismo JSON para múltiples proyectos similares

---

## 🔄 Comparación: Modo Interactivo vs JSON

| Característica | Interactivo | JSON |
|---------------|-------------|------|
| Preguntas al usuario | ✅ Sí | ❌ No |
| Control total | ✅ Sí | ✅ Sí |
| Automatizable | ❌ No | ✅ Sí |
| Reproducible | ❌ No | ✅ Sí |
| Requiere jq | ❌ No | ✅ Sí |

---

## 🆘 Solución de Problemas

### Error: "jq no está instalado"

```bash
# Instalar jq
brew install jq  # macOS
sudo apt-get install jq  # Linux
```

### Error: "El archivo JSON no es válido"

Verificar sintaxis JSON:

```bash
jq empty mi-proyecto.json
```

Si hay errores, `jq` mostrará la línea y el problema.

### Error: "El campo 'project.name' es requerido"

Asegúrate de que el JSON tenga al menos:

```json
{
  "project": {
    "name": "nombre-del-proyecto"
  }
}
```

### Valores por Defecto

Si un campo opcional no está presente, el script usará valores por defecto inteligentes basados en el nombre del proyecto.

---

## 📚 Referencias

- [Guía Completa: Crear Proyecto](./guia-completa-crear-proyecto.md)
- [Guía: Crear Nuevo Proyecto](./new-project.md)
- [Documentación de jq](https://stedolan.github.io/jq/manual/)

---

**Última actualización**: Soporte para archivos JSON implementado

