# Guía de Instalación MySQL 8.0
## Escuelas Deportivas Chile

**Motor Compatible:** MySQL Community Server 8.0.45 (libmysql - mysqlnd 8.4.16)

---

## 📋 Requisitos Previos

- MySQL Community Server 8.0+ instalado y funcionando
- Node.js 18+ (recomendado: 20.x LTS)
- Yarn o npm
- Git (opcional)

---

## 🚀 Instalación Paso a Paso

### 1. Crear Base de Datos MySQL

Conecta a MySQL como root y ejecuta:

```sql
-- Crear base de datos con soporte UTF-8 completo
CREATE DATABASE IF NOT EXISTS escuelas_deportivas
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

-- Crear usuario de aplicación (opcional pero recomendado)
CREATE USER 'escuelas_app'@'localhost' 
IDENTIFIED WITH mysql_native_password BY 'TuPasswordSeguro123!';

GRANT ALL PRIVILEGES ON escuelas_deportivas.* TO 'escuelas_app'@'localhost';
FLUSH PRIVILEGES;

-- Verificar
SHOW DATABASES LIKE 'escuelas%';
```

### 2. Configurar el Proyecto

```bash
# Ir al directorio del proyecto
cd /ruta/a/escuelas_deportivas_chile/nextjs_space

# Copiar schema de MySQL
cp prisma/schema.mysql.prisma prisma/schema.prisma

# Copiar archivo de ejemplo de variables de entorno
cp .env.mysql.example .env

# Editar .env con tus credenciales
nano .env
```

### 3. Configurar Variables de Entorno

Edita el archivo `.env`:

```env
# Base de Datos MySQL
DATABASE_URL="mysql://escuelas_app:TuPasswordSeguro123!@localhost:3306/escuelas_deportivas"

# Autenticación (genera con: openssl rand -base64 32)
NEXTAUTH_SECRET="tu-secreto-de-32-caracteres-minimo"
NEXTAUTH_URL="http://localhost:3000"
```

**⚠️ Caracteres Especiales en Contraseña:**

Si tu contraseña tiene caracteres especiales, codifícalos:

| Caracter | Código |
|----------|--------|
| @        | %40    |
| #        | %23    |
| $        | %24    |
| %        | %25    |
| &        | %26    |
| =        | %3D    |
| +        | %2B    |
| /        | %2F    |

Ejemplo: `Mi@Pass#2024` → `Mi%40Pass%232024`

### 4. Instalar Dependencias

```bash
# Instalar dependencias
yarn install

# Generar cliente Prisma para MySQL
yarn prisma generate
```

### 5. Crear Tablas en la Base de Datos

```bash
# Sincronizar schema con la base de datos
yarn prisma db push

# Verificar que se crearon las tablas (abre interfaz web)
yarn prisma studio
```

### 6. Poblar Datos Iniciales (Seed)

```bash
# Ejecutar seed
yarn prisma db seed
```

Esto crea:
- Usuario administrador: `admin@escuelasdeportivas.cl` / `admin123`
- Provincias y comunas de Chile
- Catálogo de 100+ deportes con categorías

### 7. Iniciar la Aplicación

```bash
# Modo desarrollo
yarn dev

# O para producción
yarn build
yarn start
```

La aplicación estará disponible en: **http://localhost:3000**

---

## 📊 Estructura de la Base de Datos

```
escuelas_deportivas
├── User                    # Usuarios del sistema
├── Account                 # Cuentas OAuth
├── Session                 # Sesiones activas
├── Deporte                 # Catálogo de deportes
├── Provincia               # Provincias de Chile
├── Comuna                  # Comunas por provincia
├── Escuela                 # Instituciones deportivas
├── Sede                    # Sedes de escuelas
├── Instructor              # Instructores registrados
├── UbicacionInstructor     # Ubicaciones de trabajo
├── Actividad               # Actividades/clases
├── Inscripcion             # Inscripciones de jugadores
├── Album                   # Álbumes de fotos
├── Foto                    # Fotos individuales
├── ContenidoSitio          # Contenido dinámico
└── ConfiguracionSitio      # Configuraciones
```

### Campos JSON (Arrays en MySQL)

En MySQL, los arrays se almacenan como tipo `JSON`:

| Modelo       | Campo                 | Ejemplo                              |
|--------------|-----------------------|--------------------------------------|
| Deporte      | categorias            | `["Fútbol 11", "Futsal", "Playa"]`   |
| Escuela      | certificaciones       | `["ISO 9001", "IND"]`                |
| Instructor   | certificaciones       | `["Licencia FIFA", "Título PE"]`     |
| Instructor   | especialidades        | `["Juvenil", "Adultos"]`             |
| Actividad    | diasSemana            | `["Lunes", "Miércoles", "Viernes"]`  |
| Inscripcion  | diasPreferidos        | `["Martes", "Jueves"]`               |
| Inscripcion  | deportesSeleccionados | `["id1", "id2", "id3"]`              |

---

## 🔧 Despliegue en Producción

### Opción A: PM2 (Recomendado)

```bash
# Instalar PM2 globalmente
npm install -g pm2

# Construir la aplicación
yarn build

# Iniciar con PM2
pm2 start yarn --name "escuelas-deportivas" -- start

# Configurar inicio automático
pm2 startup
pm2 save
```

### Opción B: Systemd

Crear archivo `/etc/systemd/system/escuelas-deportivas.service`:

```ini
[Unit]
Description=Escuelas Deportivas Chile
After=network.target mysql.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/escuelas_deportivas/nextjs_space
ExecStart=/usr/bin/yarn start
Restart=on-failure
Environment=NODE_ENV=production
Environment=PORT=3000

[Install]
WantedBy=multi-user.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl enable escuelas-deportivas
sudo systemctl start escuelas-deportivas
```

### Opción C: cPanel/Passenger (V2Networks)

Ver archivo `DEPLOY_V2NETWORKS.md` para instrucciones detalladas.

---

## 🐛 Solución de Problemas

### Error: Access denied for user

```bash
# Verificar credenciales
mysql -u escuelas_app -p escuelas_deportivas -e "SELECT 1"
```

### Error: Unknown database

```bash
# Crear base de datos manualmente
mysql -u root -p -e "CREATE DATABASE escuelas_deportivas"
```

### Error: Connection refused

```bash
# Verificar que MySQL está corriendo
sudo systemctl status mysql

# O en macOS
brew services list | grep mysql
```

### Error: ER_NOT_SUPPORTED_AUTH_MODE

```sql
-- Cambiar método de autenticación
ALTER USER 'escuelas_app'@'localhost' 
IDENTIFIED WITH mysql_native_password BY 'TuPassword';
FLUSH PRIVILEGES;
```

### Reiniciar Prisma Client

```bash
rm -rf node_modules/.prisma
yarn prisma generate
```

---

## 📝 Comandos Útiles

```bash
# Ver tablas (interfaz web)
yarn prisma studio

# Resetear base de datos (¡CUIDADO! Borra todos los datos)
yarn prisma db push --force-reset

# Ver SQL que ejecutaría Prisma
yarn prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma

# Formatear schema
yarn prisma format

# Validar schema
yarn prisma validate
```

---

## 🔐 Configuración MySQL Recomendada

Agregar a `my.cnf` o `my.ini`:

```ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default_authentication_plugin = mysql_native_password
max_connections = 100
innodb_buffer_pool_size = 256M

[client]
default-character-set = utf8mb4
```

---

## 📦 Archivos Incluidos para MySQL

| Archivo | Descripción |
|---------|-------------|
| `prisma/schema.mysql.prisma` | Schema Prisma para MySQL |
| `.env.mysql.example` | Ejemplo de variables de entorno |
| `scripts/mysql-setup.sql` | Script SQL para crear base de datos |
| `scripts/seed.ts` | Script para poblar datos iniciales |
| `INSTALACION_MYSQL.md` | Esta guía |
| `DEPLOY_V2NETWORKS.md` | Guía para cPanel/V2Networks |

---

**Versión:** 2.0.0  
**Motor:** MySQL Community Server 8.0.45
