# Script de Inicio - start-debug.ps1

> Documentación concisa siguiendo estándares del proyecto.

## Descripción

Script automatizado para iniciar CAMMY en desarrollo. Verifica requisitos, instala dependencias, configura entorno e inicia servidor.

## Funcionalidades

1. Verifica PHP 7.3+, Composer, Node.js, NPM y extensiones
2. Detecta Node.js 17+ y configura compatibilidad Webpack 4
3. Instala dependencias faltantes (Composer/NPM)
4. Crea `.env` y genera `APP_KEY` si no existen
5. Verifica conexión MySQL (permite continuar si falla)
6. Crea directorios storage necesarios
7. Compila assets automáticamente si faltan
8. Limpia cache de Laravel
9. Inicia servidor en puerto 8080+ disponible
10. Abre navegador automáticamente

## Uso

**Ejecución**
```powershell
.\start-debug.ps1
```

**Primera vez**: `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`

**Con permisos**: Ejecutar PowerShell como Administrador

## Flujo

1. Verificar requisitos → 2. Instalar dependencias faltantes → 3. Configurar .env y APP_KEY → 4. Verificar BD → 5. Crear directorios → 6. Compilar assets → 7. Limpiar cache → 8. Iniciar servidor (puerto 8080+) → 9. Abrir navegador

## Salida Típica

### Ejemplo de Ejecución Exitosa

```
========================================
  CAMMY - Iniciando Modo Desarrollo
========================================

[i] Verificando requisitos del sistema...

[✓] PHP instalado: v8.2.20
[✓] Todas las extensiones PHP requeridas están instaladas
[✓] Composer instalado: v2.7.1
[✓] Node.js instalado: v20.11.0
[✓] NPM instalado: v10.4.0

[i] Verificando dependencias del proyecto...

[✓] Dependencias de Composer ya instaladas
[✓] Dependencias de NPM ya instaladas

[i] Verificando configuración del entorno...

[✓] Archivo .env existe
[✓] APP_KEY configurada

[i] Verificando conexión a base de datos...

  Conexión: mysql
  Host: 127.0.0.1
  Puerto: 3306
  Base de datos: cammy_db
  Usuario: root

[✓] Conexión a base de datos exitosa

[i] Verificando permisos de directorios...

[✓] Directorios de storage verificados

[i] Verificando assets compilados...

[✓] Assets ya compilados

[i] Limpiando cache de Laravel...
[✓] Cache limpiado

========================================
  ✓ Todas las verificaciones completadas
========================================

========================================
  Iniciando servidor de desarrollo...
========================================

  URL: http://localhost:8080
  Presiona Ctrl+C para detener el servidor

[i] Intentando iniciar con 'php artisan serve'...
[✓] Servidor iniciado con 'php artisan serve'

[i] Abriendo navegador...
```

## Troubleshooting

| Problema | Solución |
|----------|----------|
| Script no ejecuta | `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` |
| Composer install falla | Verificar conexión internet |
| NPM install falla | `npm cache clean --force && npm install` |
| Error compilar assets (Node 17+) | Automático / Manual: `$env:NODE_OPTIONS="--openssl-legacy-provider"` |
| Servidor no inicia | Agregar regla firewall para PHP |

**Variables .env verificadas**: APP_NAME, APP_ENV, APP_KEY, APP_DEBUG, DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

**Personalización**: Editar `start-debug.ps1` directamente. Puerto predeterminado: línea ~362

---

**Recomendaciones**: Primera vez como Administrador | NO usar en producción | Para desarrollo activo usar `npm run watch` aparte

**Soporte**: Revisar salida del script y logs en `storage/logs/laravel.log`
```
[!] Extensiones PHP faltantes: openssl, mbstring
El proyecto podría no funcionar correctamente
```
**Solución**: Habilitar extensiones en `php.ini`

### Base de datos no disponible
```
[!] No se pudo conectar a la base de datos
  ERROR: SQLSTATE[HY000] [1045] Access denied
¿Deseas continuar sin conexión a BD? (S/N)
```
**Opciones**:
- Verificar que MySQL esté corriendo
- Revisar credenciales en `.env`
- Continuar sin BD (solo para desarrollo frontend)

### Puerto ocupado
```
[!] Puerto 8000 en uso
[i] Usando puerto alternativo: 8001
```
**Solución**: El script encuentra automáticamente un puerto disponible

## Detener el Servidor

Para detener el servidor de desarrollo:

1. Presiona `Ctrl + C` en la ventana de PowerShell
2. El servidor se detendrá inmediatamente

## Troubleshooting

### Script no se ejecuta

**Error**: "No se puede cargar el archivo porque la ejecución de scripts está deshabilitada"

**Solución**:
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

### Composer install falla

**Posibles causas**:
- Sin conexión a internet
- Credenciales de repositorios privados

**Solución**:
- Verificar conexión
- Ejecutar `composer install` manualmente para ver error detallado

### NPM install falla

**Posibles causas**:
- Sin conexión a internet
- Cache corrupto de NPM

**Solución**:
```powershell
npm cache clean --force
npm install
```

### Error al compilar assets (Node.js 17+)

**Error**: `error:0308010C:digital envelope routines::unsupported`

**Causa**: Node.js 17+ usa OpenSSL 3, incompatible con Webpack 4

**Solución automática**: El script detecta y configura `NODE_OPTIONS` automáticamente

**Verificación**:
```powershell
# Ver versión de Node.js
node --version

# Si es v17 o superior, el script configurará automáticamente:
# $env:NODE_OPTIONS = "--openssl-legacy-provider"
```

**Solución manual permanente**: Ya aplicada en `package.json`

### Servidor no inicia

**Si ambos métodos fallan** (artisan serve y servidor PHP nativo):

1. Verificar firewall de Windows
2. Agregar regla para PHP:
```powershell
New-NetFirewallRule -DisplayName "PHP Dev Server" -Direction Inbound -Program "C:\php82\php.exe" -Action Allow
```

## Variables de Entorno Importantes

El script verifica estas variables en `.env`:

- `APP_NAME`: Nombre de la aplicación
- `APP_ENV`: Entorno (local, production)
- `APP_KEY`: Clave de encriptación (generada automáticamente)
- `APP_DEBUG`: Modo debug (true/false)
- `DB_CONNECTION`: Tipo de BD (mysql)
- `DB_HOST`: Host de BD
- `DB_PORT`: Puerto de BD
- `DB_DATABASE`: Nombre de la BD
- `DB_USERNAME`: Usuario de BD
- `DB_PASSWORD`: Contraseña de BD

## Personalización

Para modificar el comportamiento del script, edita `start-debug.ps1`:

### Cambiar puerto predeterminado
```powershell
# Línea ~395
$port = 8000  # Cambiar a puerto deseado
```

### Deshabilitar compilación de assets
```powershell
# Comentar sección de assets (líneas ~275-295)
```

### Agregar verificaciones adicionales
Añadir nuevas funciones después de la sección de funciones auxiliares

## Recomendaciones

1. **Primera ejecución**: Ejecutar como Administrador
2. **Desarrollo diario**: Ejecución normal es suficiente
3. **Problemas de BD**: Revisar MySQL/MariaDB antes de ejecutar
4. **Assets**: Compilar manualmente con `npm run watch` para desarrollo activo
5. **Producción**: NO usar este script en producción

## Ventajas del Script

- ✅ **Ahorra tiempo**: No necesitas ejecutar múltiples comandos
- ✅ **Previene errores**: Detecta problemas antes de iniciar
- ✅ **Autocorrección**: Resuelve problemas comunes automáticamente
- ✅ **Informativo**: Muestra estado de cada verificación
- ✅ **Inteligente**: Toma decisiones según el estado del proyecto
- ✅ **Robusto**: Maneja errores y ofrece alternativas
- ✅ **Conveniente**: Abre automáticamente el navegador cuando el servidor está listo

## Soporte

Si encuentras problemas con el script:

1. Revisa la salida del script para identificar el error
2. Consulta la sección de Troubleshooting
3. Ejecuta los comandos manualmente para diagnóstico detallado
4. Revisa los logs en `storage/logs/laravel.log`
