# language: fr

@api @navigation @mode-detection @mvp
Fonctionnalité: Basculement automatique entre modes voiture et piéton

  En tant que système de navigation
  Je veux détecter automatiquement le mode de déplacement de l'utilisateur
  Et basculer entre mode voiture et mode piéton selon la vitesse GPS
  Afin d'optimiser l'expérience utilisateur sans action manuelle

  Contexte:
    Étant donné un utilisateur authentifié avec l'application active
    Et la géolocalisation est activée et autorisée
    Et les permissions de géolocalisation en arrière-plan sont accordées

  # ============================================================================
  # DÉTECTION INITIALE DU MODE AU DÉMARRAGE
  # ============================================================================

  Scénario: Démarrage application à vitesse piéton (0-4 km/h)
    Étant donné l'utilisateur ouvre l'application
    Et les 3 premières lectures GPS montrent des vitesses de [0, 2, 3] km/h
    Quand le système détermine le mode initial
    Alors le mode "piéton" doit être activé par défaut
    Et les notifications push géolocalisées doivent être activées
    Et un rayon de détection de 200m doit être appliqué

  Scénario: Démarrage application en mouvement (≥5 km/h)
    Étant donné l'utilisateur ouvre l'application
    Et les 3 premières lectures GPS montrent des vitesses de [30, 35, 32] km/h
    Quand le système détermine le mode initial
    Alors le mode "voiture" doit être activé par défaut
    Et les notifications in-app avec compteur 7s doivent être activées
    Et l'ETA doit être calculé pour les contenus géolocalisés

  Scénario: Démarrage avec GPS instable - mode par défaut
    Étant donné l'utilisateur ouvre l'application
    Et les lectures GPS sont erratiques : [0, 45, 2, 60, 1] km/h
    Quand le système ne peut pas déterminer le mode avec confiance
    Alors le mode "piéton" doit être activé par défaut (mode le plus sûr)
    Et une modal doit demander à l'utilisateur de confirmer son mode
    Et le choix utilisateur doit être mémorisé pour la session

  # ============================================================================
  # BASCULEMENT VOITURE → PIÉTON (vitesse <5 km/h soutenue)
  # ============================================================================

  Scénario: Arrêt prolongé déclenche basculement piéton
    Étant donné l'utilisateur est en mode voiture
    Et la vitesse moyenne sur 2 minutes est de 2 km/h (embouteillage ou arrêt)
    Quand le système détecte cette condition pendant 2 minutes consécutives
    Alors le mode doit basculer automatiquement vers "piéton"
    Et une notification toast doit informer : "Mode piéton activé"
    Et les notifications push géolocalisées doivent être activées
    Et le cooldown voiture actif doit être annulé

  Scénario: Stationnement confirmé (vitesse = 0 pendant 2 minutes)
    Étant donné l'utilisateur est en mode voiture
    Et la vitesse GPS est de 0 km/h pendant 2 minutes consécutives
    Et la précision GPS est <20m (pas de perte signal)
    Quand le système détecte l'arrêt prolongé
    Alors le mode doit basculer vers "piéton"
    Et une notification doit proposer : "Voulez-vous activer le mode piéton ?"
    Et si l'utilisateur ne répond pas, le basculement doit être automatique après 30 secondes

  Scénario: Embouteillage prolongé (vitesse <5 km/h mais en mouvement)
    Étant donné l'utilisateur est en mode voiture à 35 km/h
    Et la vitesse chute à 3 km/h et oscille entre 0-4 km/h
    Et cette condition dure 3 minutes
    Quand le système détecte un mouvement résiduel (pas totalement arrêté)
    Alors le mode "voiture" doit être maintenu temporairement
    Mais le calcul ETA doit passer en mode "vitesse lente"
    Et après 5 minutes <5 km/h, le mode piéton doit être proposé

  Scénario: Feu rouge ou arrêt temporaire ne déclenche PAS de basculement
    Étant donné l'utilisateur est en mode voiture à 50 km/h
    Et la vitesse chute à 0 km/h pendant 45 secondes (feu rouge)
    Quand le système évalue les conditions
    Alors le mode "voiture" doit être maintenu
    Car la durée <2 minutes (seuil de basculement)
    Et aucune notification ne doit être affichée

  # ============================================================================
  # BASCULEMENT PIÉTON → VOITURE (vitesse ≥5 km/h soutenue)
  # ============================================================================

  Scénario: Démarrage voiture déclenche basculement automatique
    Étant donné l'utilisateur est en mode piéton
    Et la vitesse passe de 0 km/h à 15 km/h en 10 secondes
    Et la vitesse reste ≥10 km/h pendant 30 secondes
    Quand le système détecte une accélération soutenue
    Alors le mode doit basculer automatiquement vers "voiture"
    Et une notification toast doit informer : "Mode voiture activé"
    Et les notifications in-app avec ETA doivent être activées
    Et les notifications push piéton doivent être désactivées

  Scénario: Course à pied ou vélo lent ne déclenche PAS de basculement voiture
    Étant donné l'utilisateur est en mode piéton
    Et la vitesse monte à 8 km/h et oscille entre 6-10 km/h
    Quand le système évalue les conditions
    Alors le mode "piéton" doit être maintenu
    Car la vitesse reste <15 km/h (seuil de confiance pour voiture)
    Et l'utilisateur peut basculer manuellement si nécessaire

  Scénario: Trajet en bus ou vélo rapide (15-25 km/h)
    Étant donné l'utilisateur est en mode piéton
    Et la vitesse passe à 20 km/h et reste stable
    Quand le système détecte une vitesse ≥15 km/h pendant 1 minute
    Alors une notification doit proposer : "Passer en mode véhicule ?"
    Et si l'utilisateur accepte, basculer en mode "voiture"
    Et si l'utilisateur refuse, mémoriser le choix pour 30 minutes

  Scénario: Sortie de transport en commun
    Étant donné l'utilisateur est en mode piéton
    Et la vitesse était de 0 km/h (dans le bus)
    Et la vitesse monte soudainement à 40 km/h (bus démarre)
    Puis retombe à 2 km/h après 5 minutes (descente du bus)
    Quand le système détecte ce pattern
    Alors le mode "piéton" doit être maintenu
    Et aucun basculement automatique ne doit être déclenché
    Car les transports en commun sont ambigus

  # ============================================================================
  # BASCULEMENT AVEC AUDIO-GUIDE EN COURS
  # ============================================================================

  Scénario: Basculement voiture → piéton pendant audio-guide voiture
    Étant donné l'utilisateur écoute un audio-guide en mode voiture
    Et l'utilisateur se gare (vitesse = 0 km/h pendant 2 minutes)
    Quand le système bascule en mode piéton
    Alors l'audio-guide doit continuer en mode piéton
    Et les séquences restantes doivent s'adapter au mode piéton :
      | voiture                          | piéton                          |
      | Déclenchement automatique GPS    | Navigation manuelle             |
      | Distance affichée en mètres      | Distance masquée                |
      | Flèche direction                 | Pas de flèche                   |
    Et une notification doit informer : "Audio-guide adapté au mode piéton"

  Scénario: Basculement piéton → voiture pendant audio-guide piéton
    Étant donné l'utilisateur écoute un audio-guide en mode piéton
    Et l'audio-guide est configuré pour "piéton uniquement"
    Et l'utilisateur monte en voiture (vitesse passe à 30 km/h)
    Quand le système bascule en mode voiture
    Alors l'audio-guide doit être mis en pause automatiquement
    Et une notification doit proposer : "Mettre l'audio-guide en pause ?"
    Et si confirmé, sauvegarder la progression pour reprise ultérieure

  # ============================================================================
  # GESTION DES TRANSITIONS ET EDGE CASES
  # ============================================================================

  Scénario: Basculement rapide voiture → piéton → voiture (indécision)
    Étant donné l'utilisateur est en mode voiture
    Et la vitesse oscille : 40 km/h → 0 km/h (1 min) → 35 km/h → 0 km/h (1 min)
    Quand le système détecte une instabilité de mode
    Alors le mode "voiture" doit être maintenu par défaut
    Et un délai de stabilisation de 3 minutes doit être appliqué
    Et aucune notification de basculement ne doit être envoyée

  Scénario: Tunnel ou perte GPS ne déclenche PAS de basculement
    Étant donné l'utilisateur est en mode voiture à 90 km/h
    Et le signal GPS est perdu pendant 2 minutes (tunnel)
    Quand le système détecte l'absence de signal GPS
    Alors le mode "voiture" doit être maintenu
    Et la dernière vitesse connue doit être utilisée
    Et aucun basculement ne doit être déclenché

  Scénario: Utilisateur force le mode manuellement
    Étant donné l'utilisateur est en mode voiture automatique
    Et l'utilisateur bascule manuellement en mode piéton via l'interface
    Quand le basculement manuel est effectué
    Alors le mode manuel doit être prioritaire pendant 30 minutes
    Et les basculements automatiques doivent être désactivés pendant cette période
    Et un flag "manual_override" doit être loggé

  Scénario: Reprise après override manuel
    Étant donné l'utilisateur a forcé le mode piéton il y a 35 minutes
    Et la vitesse actuelle est de 60 km/h depuis 5 minutes
    Quand la période d'override (30 min) expire
    Alors le système doit reprendre la détection automatique
    Et basculer en mode voiture car vitesse ≥5 km/h
    Et notifier l'utilisateur du basculement

  # ============================================================================
  # IMPACT SUR LES AUTRES FONCTIONNALITÉS
  # ============================================================================

  Scénario: Basculement annule le cooldown notification voiture
    Étant donné l'utilisateur est en mode voiture
    Et un cooldown de 10 minutes est actif (notification ignorée)
    Quand le mode bascule vers piéton
    Alors le cooldown doit être immédiatement annulé
    Et les notifications piéton doivent être activées
    Car les mécanismes de notification sont différents entre modes

  Scénario: Basculement adapte le rayon de détection géolocalisée
    Étant donné l'utilisateur est en mode voiture
    Et le rayon de détection pour contenus géolocalisés est adaptatif (basé sur vitesse)
    Quand le mode bascule vers piéton
    Alors le rayon de détection doit être fixé à 200m
    Et les contenus hors rayon doivent être retirés de la file d'attente
    Et une nouvelle recherche géospatiale doit être effectuée

  Scénario: Quota notifications indépendant du mode
    Étant donné l'utilisateur a reçu 4 notifications en mode voiture (quota 4/6)
    Quand le mode bascule vers piéton
    Alors le compteur de quota doit être conservé (toujours 4/6)
    Car le quota de 6/heure s'applique globalement (tous modes confondus)

  # ============================================================================
  # MÉTRIQUES & ANALYTICS
  # ============================================================================

  Scénario: Logging des basculements de mode pour analytics
    Étant donné l'utilisateur bascule de voiture à piéton
    Quand le basculement est effectué
    Alors un événement analytics doit être loggé :
      | event_type              | mode_switch              |
      | from_mode               | car                      |
      | to_mode                 | pedestrian               |
      | trigger                 | speed_threshold          |
      | speed_kmh               | 1.5                      |
      | duration_previous_mode  | 1800                     |
      | manual_override         | false                    |
      | timestamp               | 2026-02-03 14:30:00      |
    Et ces métriques doivent alimenter le dashboard de monitoring

  Scénario: Détection pattern utilisateur (majoritairement piéton vs voiture)
    Étant donné l'utilisateur utilise l'application depuis 30 jours
    Et 80% du temps d'écoute est en mode piéton
    Quand le système analyse le comportement
    Alors un flag "primary_mode: pedestrian" doit être défini
    Et le mode par défaut au démarrage doit être "piéton"
    Et l'algorithme de recommandation doit favoriser les audio-guides piétons
