# Quiniela Liga MX — Guía de instalación

## 1. Requisitos del servidor

- **PHP 8.1 o superior** (usa `openssl_pkey_derive()` para las notificaciones push, disponible desde 8.1)
- **MySQL 8.0+ o MariaDB 10.5+** (el Dashboard usa `ROW_NUMBER()`, requiere estas versiones)
- Extensiones de PHP necesarias (son estándar en casi cualquier hosting, pero confírmalo):
  - `pdo_mysql`
  - `curl`
  - `openssl`
  - `dom` / `xml` (para el importador de partidos desde Liga MX)
- Certificado **HTTPS activo** — es obligatorio, no opcional:
  - Las cookies de sesión están marcadas `Secure` (no funcionan sin HTTPS)
  - Google OAuth exige HTTPS en el `redirect_uri` de producción
  - Las notificaciones push (`PushManager`) solo funcionan en contextos seguros (HTTPS)

## 2. Subir los archivos

Sube **todo el contenido** de esta carpeta a la raíz de tu dominio o subdominio (donde sea que quede accesible como `https://tudominio.com/`).

## 3. Crear la base de datos

1. Crea una base de datos MySQL vacía (utf8mb4) desde tu panel de hosting (cPanel, Plesk, etc.)
2. Importa el archivo `schema.sql` en esa base de datos (esto crea todas las tablas y carga los 18 equipos + 17 jornadas de catálogo)

```bash
mysql -u tu_usuario -p tu_base_de_datos < schema.sql
```

## 4. Configurar `config/config.php`

Abre `config/config.php` y reemplaza:

| Constante | Qué poner |
|---|---|
| `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASS` | Los datos reales de tu base de datos |
| `APP_URL` | Tu dominio con HTTPS, sin slash final (ej. `https://quiniela.midominio.com`) |
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Ver sección 5 |
| `VAPID_PUBLIC_KEY`, `VAPID_PRIVATE_KEY` | **Genera las tuyas**, ver sección 6 — no dejes las de ejemplo |
| `VAPID_SUBJECT` | Un correo o URL de contacto real, ej. `mailto:tu-correo@dominio.com` |

## 5. Configurar el login con Google

1. Ve a [Google Cloud Console](https://console.cloud.google.com/apis/credentials)
2. Crea credenciales → **ID de cliente de OAuth** → tipo **Aplicación web**
3. En **Authorized redirect URIs** agrega exactamente:
   ```
   https://tudominio.com/auth/google_callback.php
   ```
4. Copia el **Client ID** y **Client Secret** a `config/config.php`

## 6. Generar tus propias llaves VAPID (notificaciones push)

Corre esto una sola vez en tu servidor (o en cualquier PHP local) y copia el resultado a `config/config.php`:

```bash
php -r '
$res = openssl_pkey_new(["curve_name" => "prime256v1", "private_key_type" => OPENSSL_KEYTYPE_EC]);
$details = openssl_pkey_get_details($res);
function b64url($d) { return rtrim(strtr(base64_encode($d), "+/", "-_"), "="); }
echo "PUBLIC: " . b64url("\x04" . $details["ec"]["x"] . $details["ec"]["y"]) . "\n";
echo "PRIVATE: " . b64url($details["ec"]["d"]) . "\n";
'
```

## 7. Permisos de carpetas

Estas carpetas necesitan permiso de escritura para el usuario de PHP (normalmente `www-data`):

```bash
chmod -R 755 uploads/
chmod -R 755 cron/
```

## 8. Cargar los escudos de los equipos

Intenta primero:
```bash
php download_escudos.php
```

Si Liga MX bloquea la descarga automática (ver nota en ese archivo), sube los 18 PNG manualmente a `uploads/escudos/{id}.png`, o desde el propio panel de administrador (**Equipos → Editar → subir escudo**).

## 9. Crear tu primer usuario administrador

1. Entra a `https://tudominio.com/register.php` y crea tu cuenta normal (o usa "Continuar con Google")
2. Ve a tu base de datos y ejecuta, cambiando el correo por el tuyo:
   ```sql
   UPDATE usuarios SET rol = 'admin' WHERE email = 'tu-correo@dominio.com';
   ```
3. Vuelve a iniciar sesión — ya deberías ver el panel de administrador en `/admin/dashboard.php`

Desde ahí, puedes promover a otros administradores sin volver a tocar la base de datos (**Usuarios → Hacer admin**).

## 10. Configurar el cron de recordatorios (opcional pero recomendado)

Desde tu panel de hosting (cPanel → Cron Jobs), agrega:

```
0 * * * *  php /ruta/completa/a/tu/proyecto/cron/recordatorio_cierre.php
```

Esto revisa cada hora si hay que avisarle a quien no ha enviado su quiniela y la jornada está por comenzar.

## 11. Primera prueba end-to-end sugerida

1. Como admin: crea/confirma que los 18 equipos tengan escudo (**Equipos**)
2. Da de alta los partidos de una jornada (**Jornadas y partidos** → manual o importador de Liga MX)
3. Abre esa jornada (botón **Abrir jornada**)
4. Como participante (otra cuenta): entra, ve tus partidos en **Pronósticos**, captura y envía tu quiniela
5. Como admin: pon la jornada en **Comenzada**, captura resultados en **Resultados oficiales**
6. Revisa que **Posiciones** (participante) y **Dashboard** (admin) reflejen los puntos correctamente
7. Pon la jornada en **Finalizada** y revisa **Quinielas y pagos** y **Histórico**

## Notas de seguridad antes de salir a producción

- Nunca subas `config/config.php` a un repositorio público (contiene contraseñas y llaves privadas)
- Cambia las llaves VAPID de ejemplo por las tuyas (paso 6)
- Verifica que `display_errors` esté apagado en tu `php.ini` de producción (para no exponer rutas del servidor si algo falla)
