# language: fr
Fonctionnalité: Contenus géolocalisés en mode voiture
  En tant qu'utilisateur en voiture
  Je veux recevoir des notifications de contenus géolocalisés au bon moment
  Afin de découvrir du contenu contextuel sans distraction au volant

  Contexte:
    Étant donné que l'API RoadWave est disponible
    Et que l'application est ouverte (premier plan)
    Et que le GPS est activé
    Et que l'utilisateur est en mode voiture (vitesse ≥ 5 km/h)

  # 17.2 - Détection et notification (Calcul ETA)

  Scénario: Calcul ETA et notification 7 secondes avant le point GPS
    Étant donné qu'un contenu géolocalisé existe à la Tour Eiffel (48.8584, 2.2945)
    Et que je me déplace à 50 km/h vers ce point
    Et que je suis à 98 mètres du point (ETA = 7 secondes)
    Quand le système calcule l'ETA
    Alors une notification est déclenchée immédiatement
    Et le compteur "7" s'affiche avec l'icône 🏛️
    Et une notification sonore (bip court) est jouée

  Plan du Scénario: Calcul ETA à différentes vitesses
    Étant donné qu'un contenu géolocalisé existe à un point GPS
    Et que je me déplace à <vitesse> km/h
    Quand je suis à <distance> mètres du point
    Alors l'ETA calculé est <eta> secondes
    Et la notification est déclenchée : <notification>

    Exemples:
      | vitesse | distance | eta | notification |
      | 10      | 19       | 7   | Oui          |
      | 50      | 98       | 7   | Oui          |
      | 130     | 252      | 7   | Oui          |
      | 50      | 200      | 14  | Non          |
      | 10      | 50       | 18  | Non          |

  Scénario: Notification immédiate si vitesse <5 km/h ET distance <50m
    Étant donné qu'un contenu géolocalisé existe à 30m de ma position
    Et que ma vitesse est 3 km/h (arrêté à un feu rouge)
    Quand le système détecte cette situation
    Alors une notification est déclenchée immédiatement
    Et je n'ai pas besoin d'attendre le calcul ETA

  # 17.2.2 - Format de notification minimaliste

  Scénario: Notification minimaliste sans texte (sécurité routière)
    Étant donné qu'une notification géolocalisée est déclenchée
    Quand la notification s'affiche
    Alors les éléments suivants sont visibles:
      | élément          | présent |
      | Icône du tag     | ✅      |
      | Compteur 7→1     | ✅      |
      | Son bref (bip)   | ✅      |
      | Titre texte      | ❌      |
      | Description      | ❌      |
      | Cover image      | ❌      |
      | Bouton Annuler   | ❌      |

  Plan du Scénario: Icônes selon le tag du contenu
    Étant donné qu'un contenu géolocalisé avec le tag <tag> est disponible
    Quand la notification s'affiche
    Alors l'icône <icone> est affichée

    Exemples:
      | tag              | icone |
      | Culture générale | 🏛️   |
      | Histoire         | 📜    |
      | Voyage           | ✈️   |
      | Famille          | 👨‍👩‍👧 |
      | Musique          | 🎵    |
      | Sport            | ⚽    |
      | Technologie      | 💻    |
      | Automobile       | 🚗    |

  Scénario: Compteur décrémentant de 7 à 1
    Étant donné qu'une notification géolocalisée s'affiche
    Quand le compteur démarre
    Alors le compteur affiche "7"
    Et après 1 seconde, il affiche "6"
    Et après 2 secondes, il affiche "5"
    Et après 3 secondes, il affiche "4"
    Et après 4 secondes, il affiche "3"
    Et après 5 secondes, il affiche "2"
    Et après 6 secondes, il affiche "1"
    Et après 7 secondes, la notification disparaît

  # 17.2.2b - Conformité CarPlay / Android Auto

  Scénario: Notification sonore uniquement en mode CarPlay
    Étant donné que l'application est connectée à CarPlay
    Et qu'un contenu géolocalisé est détecté (ETA 7s)
    Quand la notification est déclenchée
    Alors seule la notification sonore (bip) est jouée
    Et aucun overlay visuel n'est affiché (icône, compteur)
    Et l'utilisateur peut valider via le bouton "Suivant" au volant

  Scénario: Notification sonore uniquement en mode Android Auto
    Étant donné que l'application est connectée à Android Auto
    Et qu'un contenu géolocalisé est détecté (ETA 7s)
    Quand la notification est déclenchée
    Alors seule la notification sonore (bip) est jouée
    Et aucun overlay visuel n'est affiché
    Et l'utilisateur peut valider via le bouton "Suivant" au volant

  Scénario: Notification complète (sonore + visuelle) en mode normal
    Étant donné que l'application n'est PAS connectée à CarPlay/Android Auto
    Et qu'un contenu géolocalisé est détecté
    Quand la notification est déclenchée
    Alors la notification sonore (bip) est jouée
    Et l'overlay visuel s'affiche (icône + compteur 7→1)

  # 17.2.3 - Décompte après validation

  Scénario: Validation via bouton "Suivant" et décompte 5 secondes
    Étant donné qu'une notification géolocalisée est affichée (compteur à 5)
    Et que j'écoute un podcast
    Quand j'appuie sur le bouton "Suivant"
    Alors le compteur bascule à "5" (décompte final)
    Et le contenu actuel continue de jouer normalement
    Et le compteur décrémente: 5→4→3→2→1
    Et après 5 secondes, le contenu géolocalisé démarre (fade in 0.3s)

  Scénario: Transition fluide avec fade out/in
    Étant donné que le décompte atteint "0"
    Quand le contenu géolocalisé doit démarrer
    Alors le contenu actuel fait un fade out de 0.3s
    Et le contenu géolocalisé fait un fade in de 0.3s
    Et il n'y a pas de silence entre les deux

  Scénario: Contenu actuel se termine pendant le décompte
    Étant donné que j'ai validé la notification (décompte 5s démarre)
    Et que mon contenu actuel se termine après 2 secondes
    Quand le contenu actuel se termine
    Alors le contenu suivant du buffer démarre immédiatement
    Et le décompte continue (3→2→1)
    Et à la fin du décompte, le contenu géolocalisé remplace le buffer

  Scénario: Ignorance de la notification (pas de clic pendant 7s)
    Étant donné qu'une notification géolocalisée s'affiche (compteur 7)
    Quand 7 secondes s'écoulent sans que j'appuie sur "Suivant"
    Alors la notification disparaît automatiquement
    Et le contenu géolocalisé est perdu (pas d'insertion dans la file)
    Et un cooldown de 10 minutes est activé

  # 17.3 - Limitation anti-spam

  Scénario: Quota de 6 contenus géolocalisés par heure
    Étant donné que j'ai validé 6 notifications géolocalisées dans la dernière heure
    Quand un 7ème contenu géolocalisé est détecté
    Alors aucune notification n'est envoyée
    Et le contenu n'est pas inséré dans la file

  Scénario: Fenêtre glissante de 60 minutes
    Étant donné que j'ai validé 6 contenus géolocalisés
    Et que le premier contenu a été validé il y a 61 minutes
    Quand un nouveau contenu géolocalisé est détecté
    Alors la notification est envoyée (quota libéré : 5/6)
    Et le compteur horaire est mis à jour

  Plan du Scénario: Gestion du quota horaire
    Étant donné que <nb_valides> notifications ont été validées dans la dernière heure
    Quand un nouveau contenu géolocalisé est détecté
    Alors la notification est <action>

    Exemples:
      | nb_valides | action      |
      | 0          | envoyée     |
      | 3          | envoyée     |
      | 5          | envoyée     |
      | 6          | non envoyée |
      | 7          | non envoyée |

  Scénario: Exception audio-guides multi-séquences (comptent comme 1)
    Étant donné que j'ai démarré un audio-guide avec 8 séquences
    Et que cet audio-guide compte comme 1 contenu dans le quota
    Quand toutes les séquences de l'audio-guide sont lues
    Alors mon quota reste à 1/6
    Et je peux encore valider 5 contenus géolocalisés simples

  # 17.3.2 - Cooldown après ignorance

  Scénario: Cooldown de 10 minutes après notification ignorée
    Étant donné qu'une notification géolocalisée a été ignorée (pas de clic)
    Et qu'un cooldown de 10 minutes est activé
    Quand 5 minutes s'écoulent
    Et qu'un nouveau contenu géolocalisé est détecté
    Alors aucune notification n'est envoyée (cooldown actif)

  Scénario: Cooldown expire après 10 minutes
    Étant donné qu'un cooldown a été activé il y a 10 minutes
    Quand un nouveau contenu géolocalisé est détecté
    Alors la notification est envoyée (cooldown expiré)

  Scénario: Pas de cooldown si notification validée
    Étant donné qu'une notification géolocalisée est affichée
    Quand j'appuie sur "Suivant" dans les 7 secondes
    Alors aucun cooldown n'est activé
    Et la prochaine notification pourra être envoyée normalement

  # 17.4 - Navigation avec contenus géolocalisés

  Scénario: Contenu géolocalisé dans l'historique de navigation
    Étant donné que j'écoute un contenu du buffer
    Et que j'ai validé un contenu géolocalisé "Tour Eiffel"
    Et que j'ai écouté 42 secondes du contenu géolocalisé
    Quand j'appuie sur "Suivant" (skip)
    Et que j'appuie ensuite sur "Précédent"
    Alors le contenu géolocalisé reprend à 42 secondes

  Scénario: Contenu ignoré n'entre pas dans l'historique
    Étant donné qu'une notification géolocalisée a été ignorée
    Quand j'appuie sur "Précédent"
    Alors le contenu géolocalisé ignoré n'apparaît PAS dans l'historique
    Et je reviens au contenu d'avant

  Scénario: Skip pendant le décompte annule l'insertion
    Étant donné que j'ai validé une notification (décompte 5s en cours)
    Et que le compteur affiche "3"
    Quand j'appuie à nouveau sur "Suivant"
    Alors le décompte est annulé
    Et le contenu suivant du buffer démarre
    Et le contenu géolocalisé n'entre PAS dans l'historique

  # 17.5 - Basculement automatique voiture ↔ piéton

  Scénario: Détection mode piéton (vitesse <5 km/h stable 10s)
    Étant donné que je suis en mode voiture
    Et que ma vitesse passe à 3 km/h
    Quand cette vitesse reste stable pendant 10 secondes
    Alors le mode piéton est activé automatiquement
    Et les notifications passent en mode push arrière-plan (si permission accordée)

  Scénario: Détection mode voiture (vitesse ≥5 km/h stable 10s)
    Étant donné que je suis en mode piéton
    Et que ma vitesse passe à 15 km/h
    Quand cette vitesse reste stable pendant 10 secondes
    Alors le mode voiture est activé automatiquement
    Et les notifications passent en mode sonore + icône (app premier plan requise)

  Scénario: Hysteresis pour éviter basculements intempestifs
    Étant donné que ma vitesse passe de 20 km/h à 3 km/h (arrêt feu rouge)
    Et que ma vitesse remonte à 20 km/h après 8 secondes
    Quand le système vérifie le mode
    Alors aucun basculement n'a lieu (hysteresis de 10s non atteinte)
    Et je reste en mode voiture

  Plan du Scénario: Effets du basculement voiture → piéton
    Étant donné que je bascule de voiture à piéton
    Quand le basculement est effectué
    Alors les paramètres suivants changent:
      | paramètre         | voiture                  | piéton                    |
      | App requise       | Premier plan             | Arrière-plan OK           |
      | Notification      | Sonore + icône + compteur| Push système              |
      | Rayon détection   | ETA 7s (variable)        | 200m fixes                |
      | Type contenu      | Tous géolocalisés        | Audio-guides uniquement   |

  # 17.6 - Edge cases

  Scénario: Haute vitesse (130 km/h sur autoroute)
    Étant donné que je roule à 130 km/h (36.1 m/s)
    Et qu'un contenu géolocalisé est à 252 mètres
    Quand l'ETA de 7s est atteint
    Et que je valide la notification
    Alors le décompte 5s démarre
    Et le contenu géolocalisé démarre encore avant le point GPS (72m avant)

  Scénario: Multiples points géolocalisés proches (route touristique)
    Étant donné que 3 châteaux sont espacés de 800m chacun
    Et que je valide la notification du Château A
    Quand j'arrive près du Château B (57s plus tard à 50 km/h)
    Alors la notification du Château B est envoyée (quota 2/6, pas de cooldown)

  Scénario: Mode stationnement (vitesse <1 km/h pendant 2 min)
    Étant donné que je me gare à 30m d'un château
    Et que ma vitesse est <1 km/h pendant 2 minutes
    Quand le mode stationnement est détecté
    Alors aucune notification de contenu géolocalisé n'est envoyée
    Et le système bascule automatiquement en mode piéton

  Scénario: Reprise conduite après stationnement
    Étant donné que je suis en mode stationnement
    Et que ma vitesse passe à 20 km/h pendant 10 secondes
    Quand le système détecte la reprise de conduite
    Alors le mode voiture est réactivé
    Et les notifications géolocalisées reprennent (si quota non atteint)

  # Distinction contenus géolocalisés simples vs audio-guides

  Scénario: Contenu géolocalisé simple (1 séquence unique)
    Étant donné qu'un contenu géolocalisé simple existe à un point GPS
    Quand la notification est déclenchée (ETA 7s)
    Et que je valide
    Alors le contenu démarre après décompte 5s
    Et à la fin du contenu, le buffer normal reprend
    Et ce contenu compte 1/6 dans le quota

  Scénario: Audio-guide multi-séquences (2+ séquences enchaînées)
    Étant donné qu'un audio-guide avec 8 séquences existe
    Quand je démarre l'audio-guide
    Et que les séquences s'enchaînent automatiquement (GPS ou manuel)
    Alors l'audio-guide entier compte 1/6 dans le quota
    Et les séquences ne déclenchent PAS de notification avec compteur 7s
    Et elles se déclenchent au point GPS exact (rayon 30m)

  # Gestion erreurs

  Scénario: GPS désactivé en mode voiture
    Étant donné que je suis en mode voiture
    Quand le GPS est désactivé
    Alors aucune notification géolocalisée ne peut être envoyée
    Et un message d'erreur s'affiche: "GPS requis pour les contenus géolocalisés"

  Scénario: App en arrière-plan en mode voiture
    Étant donné que je suis en mode voiture
    Et que l'app passe en arrière-plan
    Quand un contenu géolocalisé est détecté
    Alors aucune notification n'est envoyée (app premier plan requise)
    Et le contenu n'est pas perdu (sera proposé si app rouverte dans le rayon)

  Scénario: Permission "Always Location" refusée (mode piéton indisponible)
    Étant donné que je refuse la permission "Always Location"
    Quand ma vitesse passe <5 km/h
    Alors le mode piéton n'est PAS activé
    Et le mode voiture reste actif (avec permission "When In Use")
    Et aucune notification arrière-plan n'est envoyée
