# language: fr

@api @audio-guides @geolocation @mvp
Fonctionnalité: Détection automatique du mode de déplacement

  En tant qu'utilisateur
  Je veux que l'application détecte automatiquement mon mode de déplacement
  Afin d'adapter l'expérience audio-guide (voiture, piéton, vélo, transports)

  Contexte:
    Étant donné que le système utilise les capteurs suivants pour la détection:
      | Capteur                | Utilisation                           |
      | GPS (vitesse)          | Vitesse de déplacement                |
      | Accéléromètre          | Détection de la marche                |
      | Gyroscope              | Détection de mouvements               |
      | Bluetooth              | Connexion CarPlay/Android Auto        |
      | Activité (CoreMotion)  | walking, running, cycling, automotive |

  Scénario: Détection automatique du mode voiture
    Étant donné un utilisateur "alice@roadwave.fr" en déplacement
    Quand le système détecte les indicateurs suivants:
      | Indicateur                    | Valeur              |
      | Vitesse GPS                   | 45 km/h             |
      | Accélération longitudinale    | Typique d'une voiture|
      | Bluetooth connecté            | CarPlay             |
      | Activity Recognition          | automotive          |
      | Stabilité du mouvement        | Haute               |
    Alors le mode de déplacement "voiture" est sélectionné avec confiance: 95%
    Et l'interface passe en mode voiture:
      | Caractéristique               | État                |
      | Notifications visuelles       | Minimales           |
      | Notifications audio           | Prioritaires        |
      | Affichage des distances       | Mètres + temps ETA  |
      | Auto-play au point d'intérêt  | Activé              |
    Et un événement "TRAVEL_MODE_DETECTED_CAR" est enregistré
    Et la métrique "travel_mode.detected.car" est incrémentée

  Scénario: Détection automatique du mode piéton
    Étant donné un utilisateur "bob@roadwave.fr" en déplacement
    Quand le système détecte les indicateurs suivants:
      | Indicateur                    | Valeur              |
      | Vitesse GPS                   | 4 km/h              |
      | Accéléromètre                 | Pattern de marche   |
      | Fréquence de pas              | 110 pas/min         |
      | Activity Recognition          | walking             |
      | Bluetooth connecté            | Non                 |
    Alors le mode de déplacement "piéton" est sélectionné avec confiance: 92%
    Et l'interface passe en mode piéton:
      | Caractéristique               | État                |
      | Notifications visuelles       | Complètes           |
      | Navigation libre              | Activée             |
      | Affichage carte               | Complet             |
      | Auto-play publicité           | Autorisé            |
    Et un événement "TRAVEL_MODE_DETECTED_WALKING" est enregistré
    Et la métrique "travel_mode.detected.walking" est incrémentée

  Scénario: Détection automatique du mode vélo
    Étant donné un utilisateur "charlie@roadwave.fr" en déplacement
    Quand le système détecte les indicateurs suivants:
      | Indicateur                    | Valeur              |
      | Vitesse GPS                   | 18 km/h             |
      | Accéléromètre                 | Vibrations régulières|
      | Pattern de mouvement          | Cyclique            |
      | Activity Recognition          | cycling             |
      | Variations de vitesse         | Moyennes            |
    Alors le mode de déplacement "vélo" est sélectionné avec confiance: 88%
    Et l'interface passe en mode vélo:
      | Caractéristique               | État                |
      | Notifications visuelles       | Limitées            |
      | Notifications audio           | Prioritaires        |
      | Affichage des distances       | Mètres              |
      | Auto-play au point d'intérêt  | Optionnel           |
    Et un événement "TRAVEL_MODE_DETECTED_CYCLING" est enregistré
    Et la métrique "travel_mode.detected.cycling" est incrémentée

  Scénario: Détection automatique du mode transports en commun
    Étant donné un utilisateur "david@roadwave.fr" en déplacement
    Quand le système détecte les indicateurs suivants:
      | Indicateur                    | Valeur                  |
      | Vitesse GPS                   | 35 km/h avec arrêts     |
      | Pattern d'arrêts              | Régulier (stations)     |
      | Accéléromètre                 | Stationnaire par moments|
      | Précision GPS                 | Variable (tunnels)      |
      | Activity Recognition          | automotive + stationary |
    Alors le mode de déplacement "transports" est sélectionné avec confiance: 80%
    Et l'interface passe en mode transports:
      | Caractéristique               | État                |
      | Notifications visuelles       | Complètes           |
      | Auto-play aux stations        | Activé              |
      | Affichage carte               | Complet             |
      | Prise en compte des tunnels   | Activée             |
    Et un événement "TRAVEL_MODE_DETECTED_TRANSIT" est enregistré
    Et la métrique "travel_mode.detected.transit" est incrémentée

  Scénario: Changement dynamique de mode détecté (voiture → piéton)
    Étant donné un utilisateur "eve@roadwave.fr" en mode voiture
    Et il roule à 50 km/h
    Quand l'utilisateur se gare et sort de la voiture:
      | Temps   | Vitesse | Activity     | Bluetooth |
      | T+0s    | 50 km/h | automotive   | CarPlay   |
      | T+30s   | 0 km/h  | stationary   | CarPlay   |
      | T+60s   | 0 km/h  | stationary   | Déconnecté|
      | T+90s   | 4 km/h  | walking      | Non       |
    Alors le mode bascule automatiquement de "voiture" à "piéton"
    Et une notification discrète s'affiche: "Mode piéton activé"
    Et l'interface s'adapte instantanément au mode piéton
    Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "car_to_walking"
    Et la métrique "travel_mode.transition.car_to_walking" est incrémentée

  Scénario: Changement dynamique de mode détecté (piéton → vélo)
    Étant donné un utilisateur "frank@roadwave.fr" en mode piéton
    Et il marche à 4 km/h
    Quand l'utilisateur monte sur un vélo:
      | Temps   | Vitesse | Activity     | Pattern        |
      | T+0s    | 4 km/h  | walking      | Marche         |
      | T+10s   | 8 km/h  | cycling      | Cyclique       |
      | T+20s   | 15 km/h | cycling      | Cyclique       |
      | T+30s   | 18 km/h | cycling      | Cyclique stable|
    Alors le mode bascule automatiquement de "piéton" à "vélo"
    Et une notification s'affiche: "Mode vélo activé"
    Et les paramètres audio sont ajustés pour réduire les notifications visuelles
    Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "walking_to_cycling"
    Et la métrique "travel_mode.transition.walking_to_cycling" est incrémentée

  Scénario: Détection ambiguë avec faible confiance
    Étant donné un utilisateur "grace@roadwave.fr" en déplacement
    Quand le système détecte des indicateurs contradictoires:
      | Indicateur                    | Valeur              |
      | Vitesse GPS                   | 12 km/h             |
      | Activity Recognition          | unknown             |
      | Accéléromètre                 | Pattern irrégulier  |
      | Confiance de détection        | 45%                 |
    Alors le mode actuel est conservé (pas de changement)
    Et une icône d'interrogation s'affiche discrètement
    Et l'utilisateur peut forcer manuellement le mode via un menu rapide
    Et un événement "TRAVEL_MODE_UNCERTAIN" est enregistré
    Et la métrique "travel_mode.uncertain" est incrémentée

  Scénario: Forçage manuel du mode de déplacement
    Étant donné un utilisateur "henry@roadwave.fr" en mode auto-détecté "piéton"
    Mais il est en réalité en voiture (passager)
    Quand l'utilisateur ouvre le menu rapide et sélectionne "Mode voiture"
    Alors le mode "voiture" est forcé manuellement
    Et l'auto-détection est temporairement désactivée pour 30 minutes
    Et un événement "TRAVEL_MODE_FORCED_MANUAL" est enregistré avec ancienMode: "walking", nouveauMode: "car"
    Et la métrique "travel_mode.manual_override" est incrémentée
    Et après 30 minutes, l'auto-détection se réactive automatiquement

  Scénario: Mode stationnaire détecté (arrêt prolongé)
    Étant donné un utilisateur "iris@roadwave.fr" en mode voiture
    Et il est arrêté à un feu rouge depuis 2 minutes
    Quand le système détecte:
      | Indicateur                    | Valeur              |
      | Vitesse GPS                   | 0 km/h              |
      | Activity Recognition          | stationary          |
      | Durée d'immobilité            | 120 secondes        |
      | Bluetooth connecté            | CarPlay             |
    Alors le mode reste "voiture" (pas de changement)
    Mais un flag "stationary" est activé
    Et l'audio en cours continue de jouer normalement
    Et aucun nouveau contenu n'est déclenché automatiquement
    Et un événement "TRAVEL_MODE_STATIONARY" est enregistré
    Et la métrique "travel_mode.stationary" est incrémentée

  Scénario: Reprise du mouvement après mode stationnaire
    Étant donné un utilisateur "jack@roadwave.fr" en mode "voiture stationary"
    Et il est arrêté depuis 3 minutes
    Quand le système détecte:
      | Temps   | Vitesse | Activity     |
      | T+0s    | 0 km/h  | stationary   |
      | T+5s    | 10 km/h | automotive   |
      | T+10s   | 30 km/h | automotive   |
    Alors le flag "stationary" est désactivé
    Et le mode "voiture" normal est restauré
    Et la logique de déclenchement automatique des audio-guides est réactivée
    Et un événement "TRAVEL_MODE_RESUMED" est enregistré
    Et la métrique "travel_mode.resumed" est incrémentée

  Scénario: Gestion des permissions de localisation et capteurs
    Étant donné un utilisateur "kate@roadwave.fr" qui lance l'application
    Quand les permissions suivantes sont refusées:
      | Permission               | État    |
      | Localisation GPS         | Refusée |
      | Motion & Fitness         | Refusée |
    Alors l'auto-détection du mode est désactivée
    Et un message s'affiche: "Pour bénéficier de l'expérience optimale, activez les permissions de localisation et mouvement"
    Et un bouton "Activer les permissions" redirige vers les Réglages
    Et l'utilisateur doit sélectionner manuellement son mode de déplacement
    Et un événement "TRAVEL_MODE_PERMISSIONS_DENIED" est enregistré
    Et la métrique "travel_mode.permissions_denied" est incrémentée

  Scénario: Optimisation de la batterie avec détection adaptative
    Étant donné un utilisateur "luke@roadwave.fr" avec batterie < 20%
    Quand le mode économie d'énergie est activé
    Alors la fréquence de détection du mode est réduite:
      | Mode normal     | Mode économie d'énergie |
      | Toutes les 5s   | Toutes les 30s          |
    Et l'utilisation du GPS est optimisée (requêtes moins fréquentes)
    Et l'accéléromètre et gyroscope sont consultés moins souvent
    Et la précision de détection peut être légèrement réduite
    Et un événement "TRAVEL_MODE_BATTERY_SAVER" est enregistré
    Et la métrique "travel_mode.battery_saver.enabled" est incrémentée

  Scénario: Historique des modes de déplacement pour statistiques
    Étant donné un utilisateur "mary@roadwave.fr" qui utilise l'application depuis 1 mois
    Quand l'utilisateur accède à "Mon compte > Statistiques > Modes de déplacement"
    Alors l'utilisateur voit un graphique avec répartition:
      | Mode         | Temps total | Pourcentage |
      | Voiture      | 15h 30min   | 45%         |
      | Piéton       | 12h 10min   | 35%         |
      | Vélo         | 5h 20min    | 15%         |
      | Transports   | 1h 40min    | 5%          |
    Et des insights sont affichés: "Vous utilisez principalement RoadWave en voiture"
    Et les données sont conservées de manière agrégée pour respecter le RGPD

  Scénario: Métriques de performance de la détection
    Étant donné que le système traite 100 000 détections de mode par heure
    Quand les métriques de performance sont collectées
    Alors les indicateurs suivants sont respectés:
      | Métrique                              | Valeur cible |
      | Temps de détection du mode            | < 100ms      |
      | Précision de détection (voiture)      | > 95%        |
      | Précision de détection (piéton)       | > 90%        |
      | Précision de détection (vélo)         | > 85%        |
      | Taux de transitions incorrectes       | < 5%         |
      | Consommation batterie par détection   | < 0.01%      |
    Et les métriques sont exportées vers le système de monitoring
    Et des alertes sont déclenchées si la précision < 80%

  Scénario: A/B testing des algorithmes de détection
    Étant donné que le système teste 2 algorithmes de détection:
      | Algorithme | Description                      |
      | A          | Basé sur CoreMotion uniquement   |
      | B          | Combinaison capteurs + ML        |
    Quand un utilisateur "nathan@roadwave.fr" est assigné au groupe B
    Alors l'algorithme B est utilisé pour la détection
    Et les métriques de précision sont tracées séparément par algorithme
    Et les événements incluent le tag "algorithm_version: B"
    Et après analyse, l'algorithme le plus performant est déployé à 100%
