# language: fr

@api @navigation @geolocation @mvp
Fonctionnalité: Calcul ETA et notification contenus géolocalisés

  En tant que système de recommandation
  Je veux calculer le temps d'arrivée estimé (ETA) pour les contenus géolocalisés
  Afin de déclencher la notification au bon moment (7 secondes avant)

  Contexte:
    Étant donné un utilisateur authentifié en mode voiture
    Et la géolocalisation est activée et autorisée

  # ============================================================================
  # CALCUL ETA VITESSE NORMALE (≥5 km/h)
  # ============================================================================

  Scénario: Calcul ETA avec vitesse constante 50 km/h
    Étant donné un contenu géolocalisé situé à 300m de l'utilisateur
    Et l'utilisateur se déplace à 50 km/h en direction du point
    Quand le système calcule l'ETA
    Alors l'ETA estimé doit être d'environ 21 secondes
    Et la notification doit être déclenchée dans 14 secondes (21s - 7s)

  Scénario: Recalcul ETA en temps réel avec variation de vitesse
    Étant donné un contenu géolocalisé situé à 500m
    Et l'utilisateur se déplace initialement à 70 km/h
    Et l'ETA initial est de 25 secondes
    Quand l'utilisateur ralentit à 30 km/h
    Alors l'ETA doit être recalculé à 60 secondes
    Et le délai de notification doit être ajusté en conséquence

  Scénario: Notification déclenchée exactement 7 secondes avant l'arrivée
    Étant donné un contenu géolocalisé situé à 150m
    Et l'utilisateur se déplace à 60 km/h
    Et l'ETA calculé est de 9 secondes
    Quand l'ETA atteint 7 secondes
    Alors une notification push doit être envoyée
    Et la notification doit contenir un compteur visuel de 7 à 1
    Et un son de notification doit être joué

  Scénario: Pas de notification si l'utilisateur dévie de la trajectoire
    Étant donné un contenu géolocalisé situé à 200m au nord
    Et l'utilisateur se déplace à 50 km/h en direction du contenu
    Et l'ETA est de 14 secondes
    Quand l'utilisateur change de direction vers l'est
    Et la distance au contenu commence à augmenter
    Alors la notification ne doit pas être déclenchée
    Et l'ETA doit être invalidé

  # ============================================================================
  # CAS VITESSE LENTE (<5 km/h)
  # ============================================================================

  Scénario: Notification immédiate si vitesse <5 km/h et distance <50m
    Étant donné un contenu géolocalisé situé à 30m
    Et l'utilisateur se déplace à 3 km/h (piéton ou embouteillage)
    Quand le système détecte la vitesse <5 km/h
    Alors la notification doit être déclenchée immédiatement
    Et le message doit indiquer "Contenu disponible à proximité"

  Scénario: Pas de notification si vitesse <5 km/h mais distance >50m
    Étant donné un contenu géolocalisé situé à 80m
    Et l'utilisateur se déplace à 4 km/h
    Quand le système évalue les conditions de notification
    Alors aucune notification ne doit être envoyée
    Et le système doit attendre que la distance soit <50m ou vitesse ≥5 km/h

  Scénario: Basculement vitesse normale → lente avec recalcul
    Étant donné un contenu géolocalisé situé à 100m
    Et l'utilisateur se déplace à 40 km/h (ETA = 9s, notification dans 2s)
    Quand l'utilisateur ralentit brutalement à 2 km/h (embouteillage)
    Et la vitesse reste <5 km/h pendant 5 secondes
    Et la distance est maintenant 85m
    Alors le mode de calcul ETA doit basculer en "vitesse lente"
    Et la notification immédiate ne doit pas être envoyée (distance >50m)

  Scénario: Notification immédiate en approche lente continue
    Étant donné un contenu géolocalisé situé à 60m
    Et l'utilisateur se déplace à 3 km/h
    Quand l'utilisateur atteint 45m du point (distance <50m)
    Alors la notification doit être déclenchée immédiatement
    Et le compteur visuel doit afficher "À proximité"

  # ============================================================================
  # GESTION TRAJECTOIRES COMPLEXES
  # ============================================================================

  Scénario: Route sinueuse avec distance GPS ≠ distance réelle
    Étant donné un contenu géolocalisé situé à 250m à vol d'oiseau
    Mais la route sinueuse fait 400m de trajet réel
    Et l'utilisateur se déplace à 50 km/h
    Quand le système calcule l'ETA
    Alors l'ETA doit utiliser la distance GPS (250m) par défaut
    Et l'ETA estimé doit être d'environ 18 secondes
    Et une marge d'erreur de ±3 secondes doit être tolérée

  Scénario: Contenu sur autoroute parallèle non accessible
    Étant donné un contenu géolocalisé sur une autoroute parallèle à 100m
    Et l'utilisateur roule sur une route secondaire sans accès direct
    Et la distance GPS est de 100m mais l'accès réel est à 2 km
    Quand le système détecte que l'utilisateur s'éloigne après 10 secondes
    Alors la notification ne doit pas être déclenchée
    Et le contenu doit être retiré de la file d'attente

  # ============================================================================
  # EDGE CASES & ERREURS
  # ============================================================================

  Scénario: GPS imprécis (précision >50m)
    Étant donné un contenu géolocalisé situé à 150m
    Et la précision GPS actuelle est de 65m
    Quand le système calcule l'ETA
    Alors l'ETA doit être calculé avec une marge d'erreur élevée
    Et la notification doit être différée de 2 secondes supplémentaires
    Et un flag "low_accuracy" doit être ajouté aux métriques

  Scénario: Vitesse nulle (stationnement) avec contenu proche
    Étant donné un contenu géolocalisé situé à 25m
    Et l'utilisateur est à l'arrêt (vitesse = 0 km/h) depuis 10 secondes
    Quand le système évalue les conditions
    Alors aucune notification ne doit être envoyée automatiquement
    Et le contenu doit être affiché dans la file d'attente manuelle
    Et l'utilisateur peut le sélectionner manuellement

  Scénario: Perte signal GPS pendant le calcul ETA
    Étant donné un contenu géolocalisé avec ETA de 12 secondes
    Et une notification prévue dans 5 secondes
    Quand le signal GPS est perdu (tunnel)
    Alors le calcul ETA doit être gelé à la dernière valeur connue
    Et la notification doit être déclenchée selon l'ETA gelé
    Et un fallback de 10 secondes max doit être appliqué

  Scénario: Vitesse erratique (GPS instable)
    Étant donné un contenu géolocalisé situé à 200m
    Et les lectures GPS montrent : 50 km/h → 5 km/h → 60 km/h → 10 km/h en 10 secondes
    Quand le système détecte une instabilité GPS
    Alors l'ETA doit être calculé avec une moyenne mobile sur 5 secondes
    Et la notification ne doit être déclenchée qu'avec une confiance >70%

  # ============================================================================
  # MÉTRIQUES & LOGS
  # ============================================================================

  Scénario: Logging des calculs ETA pour analytics
    Étant donné un contenu géolocalisé avec notification déclenchée
    Quand la notification est envoyée
    Alors un événement analytics doit être loggé avec :
      | distance_meters       | 180          |
      | speed_kmh            | 55           |
      | eta_seconds          | 11.7         |
      | notification_offset  | 7            |
      | gps_accuracy_meters  | 12           |
      | calculation_method   | standard_eta |
    Et la timestamp de notification doit être enregistrée

  Scénario: Comparaison ETA prédit vs ETA réel
    Étant donné un contenu géolocalisé avec ETA prédit de 15 secondes
    Et une notification déclenchée à 8 secondes avant
    Quand l'utilisateur atteint réellement le point
    Alors l'ETA réel doit être calculé et comparé
    Et l'écart doit être loggé pour amélioration de l'algorithme
    Et si l'écart >5 secondes, un flag "prediction_error" doit être levé
