# 🔧 Fix Overpass API Rate Limit - APPLIQUÉ

## ❌ Problème rencontré

```
❌ cafe → ERROR: Overpass returned HTML/XML instead of JSON
⏸️  Backing off 4000ms...
```

**Cause:** L'API Overpass retourne du HTML/XML au lieu de JSON quand :
- Rate limit dépassé (trop de requêtes)
- Serveur surchargé
- Timeout temporaire

---

## ✅ Solutions implémentées

### 1. Retry automatique avec backoff exponentiel

```javascript
// Avant: Pas de retry, juste un backoff simple
reject(new Error('Overpass returned HTML/XML'))

// Après: 3 tentatives avec délais croissants
if (retryCount < 3) {
  const retryDelay = Math.min(5000 * Math.pow(2, retryCount), 30000)
  // 5s → 10s → 20s → 30s max
  await fetchFromOverpass(bbox, category, limit, retryCount + 1)
}
```

### 2. Détection améliorée des erreurs HTML/XML

```javascript
// Détecte tous les types de réponses HTML
if (data.trim().startsWith('<?xml') || 
    data.trim().startsWith('<!DOCTYPE') || 
    data.trim().startsWith('<html')) {
  // Rate limit détecté
}
```

### 3. Backoff plus long pour rate limits

```javascript
// Avant: 2s, 4s, 8s, 16s, 30s
const backoffTime = 2000 * Math.pow(2, failedFetches)

// Après: 10s, 20s, 40s, 60s (plus long pour rate limits)
const baseDelay = isRateLimit ? 10000 : 2000
const backoffTime = baseDelay * Math.pow(2, failedFetches)
```

### 4. Pause longue après 5 erreurs consécutives

```javascript
if (failedFetches >= 5) {
  console.log('⚠️  Too many errors, pausing for 2 minutes...')
  await new Promise(resolve => setTimeout(resolve, 120000))
  failedFetches = 0
}
```

### 5. User-Agent ajouté

```javascript
headers: {
  'User-Agent': 'MyRoadTrip-Seeder/2.0'
}
```

---

## 🎯 Comportement maintenant

### Scénario 1: Rate limit temporaire

```
❌ cafe → ERROR: Overpass returned HTML/XML (rate limit or error)
   ⏳ Rate limit detected, retrying in 5000ms... (attempt 1/3)
✅ cafe → 142 POIs
```

### Scénario 2: Rate limit persistant

```
❌ cafe → ERROR: Overpass returned HTML/XML (rate limit or error)
   ⏳ Rate limit detected, retrying in 5000ms... (attempt 1/3)
   ⏳ Rate limit detected, retrying in 10000ms... (attempt 2/3)
   ⏳ Rate limit detected, retrying in 20000ms... (attempt 3/3)
✅ cafe → 142 POIs
```

### Scénario 3: 5 erreurs consécutives

```
❌ cafe → ERROR: ...
⏸️  Backing off 10s... (rate limit)
❌ bar → ERROR: ...
⏸️  Backing off 20s... (rate limit)
❌ bakery → ERROR: ...
⏸️  Backing off 40s... (rate limit)
❌ theater → ERROR: ...
⏸️  Backing off 60s... (rate limit)
❌ cinema → ERROR: ...
⚠️  Too many errors, pausing for 2 minutes...
[Script se met en pause 2 minutes]
✅ library → 45 POIs
```

---

## 📊 Délais appliqués

| Situation | Délai initial | Max délai | Retries |
|-----------|--------------|-----------|---------|
| **Erreur normale** | 2s | 30s | 3× |
| **Rate limit** | 10s | 60s | 3× |
| **5 erreurs consécutives** | 2 minutes | - | - |
| **Entre chaque catégorie** | 600ms | - | - |

---

## 🚀 Que faire maintenant ?

### Option 1: Reprendre là où ça s'est arrêté

```bash
node scripts/seed-france-complete.mjs --resume
```

Le script reprendra automatiquement après la dernière ville complétée (checkpoint sauvegardé).

### Option 2: Recommencer avec les nouvelles protections

```bash
# Supprimer le checkpoint pour recommencer
rm .seed-checkpoint.json

# Relancer en mode quick
node scripts/seed-france-complete.mjs --mode=quick
```

### Option 3: Utiliser un serveur Overpass alternatif

Si le problème persiste, on peut modifier le script pour utiliser un autre serveur Overpass :

```javascript
// Remplacer ligne ~242:
const url = 'https://overpass.kumi.systems/api/interpreter'
// Au lieu de:
const url = 'https://overpass-api.de/api/interpreter'
```

**Serveurs Overpass alternatifs:**
- `https://overpass.kumi.systems/api/interpreter`
- `https://overpass.openstreetmap.ru/api/interpreter`
- `https://overpass.openstreetmap.fr/api/interpreter`

---

## 💡 Recommandation

**Utiliser `--resume` pour continuer** :

```bash
node scripts/seed-france-complete.mjs --resume
```

Le script va :
1. ✅ Reprendre à Paris (où il s'est arrêté)
2. ✅ Réessayer la catégorie "cafe" avec les nouveaux retries
3. ✅ Continuer avec les protections améliorées

**Temps estimé restant:** 4-6h (mode quick) depuis Paris

---

## 📈 Statistiques actuelles

D'après les logs fournis:

| Statut | POIs |
|--------|------|
| ✅ Succès | 767 POIs (10 catégories) |
| ⚠️ 0 POIs | 1 (beach - normal à Paris) |
| ❌ Erreur | 1 (cafe - sera réessayé) |

**Progression:** 1/45 villes (Paris - 2%)

---

**Changement appliqué:** ✅ Script mis à jour  
**Action recommandée:** Exécuter `--resume`  
**Estimation:** Le script devrait mieux gérer les rate limits maintenant
