# 🤖 Configuración de Scraping Automático Diario

## ¿Cómo funciona ahora?

El sistema tiene **3 formas** de ejecutar el scraping automático. Elige UNA según tu hosting:

---

## Opción 1: GitHub Actions (RECOMENDADO - ✅ Ahora Configurado)

**Mejor para**: Cloudflare Pages, cualquier servidor

El workflow se ejecuta automáticamente **cada día a las 00:00 UTC** (02:00 AM CET).

### ⚙️ Configuración Requerida

En GitHub, ve a **Settings → Secrets and variables → Actions** y agrega:

```
API_URL = https://tu-dominio.com (sin barra final)
CRON_SECRET = tu-valor-de-CRON_SECRET-en-.env.local
```

### 📊 Carriers Soportados

El workflow ahora ejecuta **TODOS los carriers**:

1. **Maersk** (MNBU, SUDU, CXRU) - API endpoint
2. **ONE** (ONEU) - API endpoint
3. **MSC** (MEDU, MSGU) - API endpoint
4. **Evergreen** (EMCU, EGSU) - API endpoint
5. **Yang Ming** (YMLU) - API endpoint
6. **CMA CGM** (CMAU) - ✨ Nuevo: undetected_chromedriver
7. **Hapag-Lloyd** (HLBU) - ✨ Nuevo: undetected_chromedriver

### ✅ Verificar que está funcionando

1. Ve a **Actions** en tu repo
2. Busca el workflow "Daily ETA Web Scraper"
3. Debería ejecutarse automáticamente cada día a medianoche UTC

**Manual trigger**: Puedes ejecutarlo manualmente desde Actions → "Daily ETA Web Scraper" → "Run workflow"

### 📋 Requisitos Locales (para pruebas)

Si quieres probar localmente:

```bash
# Node.js dependencies
npm install

# Python dependencies
pip install undetected-chromedriver selenium

# Test individual scrapers
npx tsx scripts/batch-update-maersk.ts    # Maersk
npx tsx scripts/batch-update-oneu.ts      # ONE
npx tsx scripts/batch-update-msc.ts       # MSC
npx tsx scripts/batch-update-evergreen.ts # Evergreen
npx tsx scripts/batch-update-yangming.ts  # Yang Ming
npx tsx scripts/batch-update-cma.ts       # CMA CGM
npx tsx scripts/batch-update-hapag.ts     # Hapag-Lloyd
```

---

## Opción 2: Cloudflare Workers Cron (Alternativo)

**Mejor para**: Cuando está deployado en Cloudflare Workers

El archivo `wrangler.jsonc` ya tiene configurado:
```json
"triggers": {
  "crons": ["0 0 * * *"]
}
```

Pero requiere que el handler esté en el archivo principal. Para activar esto:

1. Actualiza `wrangler.jsonc` a:
   ```json
   "main": "src/worker.ts"
   ```
2. Deploy a Cloudflare: `npm run deploy`

**Nota**: Esto puede romper tu Next.js app. Usa GitHub Actions en su lugar.

---

## Opción 3: Vercel Cron (Si usas Vercel)

**Mejor para**: Deployments en Vercel

Vercel ejecuta crons automáticamente basado en los endpoints `/api` que configures.

Añade a `vercel.json`:
```json
{
  "crons": [
    {
      "path": "/api/admin/eta-scraper",
      "schedule": "0 0 * * *"
    }
  ]
}
```

---

## ✅ Verificación Rápida

Para probar manualmente si todo funciona:

```bash
# Test local
curl -X POST http://localhost:3000/api/admin/eta-scraper \
  -H "Authorization: Bearer your-cron-secret" \
  -H "Content-Type: application/json" \
  -d '{"allContainers": true, "force": true}'

# Test en producción
curl -X POST https://tu-dominio.com/api/admin/eta-scraper \
  -H "Authorization: Bearer your-cron-secret" \
  -H "Content-Type: application/json" \
  -d '{"allContainers": true, "force": true}'
```

Deberías recibir una respuesta como:
```json
{
  "success": true,
  "message": "ETA scraping completed",
  "scrapedCount": 45,
  "successCount": 43,
  "errorCount": 2
}
```

---

## 📊 Qué hace el scraper cada día

1. **Busca** todos los containers activos en la BD
2. **Scrappea** las páginas web de cada naviera (Maersk, ONE, MSC, Evergreen, Yang Ming)
3. **Extrae** las fechas ETA más recientes
4. **Actualiza** la BD para que TODOS los admins vean los nuevos ETAs
5. **Registra** todo en `container_tracking_history` para auditoría

---

## 🚨 Troubleshooting

**¿El scraper no se ejecuta?**
- Verifica que `CRON_SECRET` está en los secrets de GitHub
- Verifica que `API_URL` es correcto (sin barra final)
- Revisa los logs en GitHub Actions → Actions → Latest run

**¿Dice "Unauthorized"?**
- El `CRON_SECRET` en GitHub no coincide con el de tu app
- Verifica `.env.local` vs secrets de GitHub

**¿Los containers no se actualizan?**
- Revisa los logs en `/api/admin/eta-scraper` manualmente
- Verifica que los carriers están soportados (Maersk, ONE, MSC, Evergreen, Yang Ming)
- CMA y Hapag-Lloyd están bloqueados por protecciones anti-bot

---

## 📅 Calendarios de Ejecución

| Opción | Horario | Timezone | Comando |
|--------|---------|----------|---------|
| GitHub Actions (actual) | `0 0 * * *` | UTC | Automático |
| Cloudflare | `0 0 * * *` | UTC | `npm run deploy` |
| Vercel | `0 0 * * *` | UTC | Auto-deploy |

**Para cambiar horario a otro**:
- 02:00 AM CET: `0 0 * * *` (UTC)
- 06:00 AM CET: `0 4 * * *` (UTC)  
- 12:00 PM CET: `0 10 * * *` (UTC)
- 6:00 PM CET: `0 16 * * *` (UTC)

Edita: `.github/workflows/daily-eta-scraper.yml` línea 7

---

## 📝 Logs

Ver logs del último scraping:
- **GitHub Actions**: Go to Actions → Daily ETA Web Scraper → latest run
- **Cloudflare**: `wrangler tail` (requiere CLI)
- **Vercel**: Vercel Dashboard → Function Logs → /api/admin/eta-scraper
