# language: fr
Fonctionnalité: Validité et renouvellement contenus offline
  En tant qu'utilisateur
  Je veux que mes contenus téléchargés restent valides un certain temps
  Afin de garantir la légalité et la fraîcheur du contenu

  Contexte:
    Étant donné que je suis connecté à l'application RoadWave
    Et que j'ai des contenus téléchargés

  # ===== DURÉE DE VALIDITÉ =====

  Scénario: Validité de 30 jours après téléchargement
    Étant donné que je télécharge un contenu le 1er juin 2025
    Quand le téléchargement est terminé
    Alors le contenu est valide jusqu'au 1er juillet 2025 (30 jours)
    Et la date d'expiration est stockée en local

  Scénario: Affichage date expiration sur contenu téléchargé
    Étant donné que j'ai téléchargé un contenu il y a 20 jours
    Quand je consulte les détails du contenu
    Alors je vois "Expire dans 10 jours"
    Et je sais combien de temps il reste avant expiration

  Scénario: Standard industrie aligné (Spotify, YouTube, Deezer)
    Étant donné que Spotify, YouTube Music et Deezer utilisent 30 jours
    Quand RoadWave fixe également 30 jours
    Alors c'est le standard accepté par les utilisateurs
    Et il n'y a pas de confusion avec les autres plateformes

  Scénario: Justification 30 jours - Force reconnexion régulière
    Étant donné qu'un utilisateur ne se connecte jamais
    Quand ses contenus expirent après 30 jours
    Alors il est obligé de se reconnecter pour les renouveler
    Et le système peut vérifier:
      | vérification                    |
      | Abonnement Premium toujours actif|
      | Contenus non modérés/supprimés   |
      | Métadonnées à jour               |

  Scénario: Justification 30 jours - Évite stockage obsolète
    Étant donné qu'un contenu a été modéré après téléchargement
    Quand le contenu expire après 30 jours maximum
    Alors le contenu illégal est automatiquement supprimé
    Et ne reste pas indéfiniment sur le device

  # ===== RENOUVELLEMENT AUTOMATIQUE =====

  Scénario: Détection WiFi et contenus >25 jours
    Étant donné que j'ai des contenus téléchargés il y a 26 jours
    Quand l'app détecte une connexion WiFi
    Alors une requête GET /offline/contents/refresh est envoyée
    Et le backend vérifie chaque contenu

  Scénario: Vérification abonnement Premium toujours actif
    Étant donné qu'un contenu téléchargé en Premium est à renouveler
    Quand le backend vérifie le statut
    Et que l'abonnement Premium est toujours actif
    Alors la validité est renouvelée à 30 jours supplémentaires

  Scénario: Abonnement Premium expiré - Contenu non renouvelé
    Étant donné qu'un contenu Premium téléchargé est à renouveler
    Quand le backend vérifie le statut
    Et que l'abonnement Premium a expiré
    Alors le contenu n'est pas renouvelé
    Et il sera supprimé à l'expiration (J-0)
    Et l'utilisateur voit "Contenu Premium expiré (abonnement inactif)"

  Scénario: Vérification contenu pas modéré/supprimé
    Étant donné qu'un contenu téléchargé est à renouveler
    Quand le backend vérifie le statut
    Et que le contenu a été modéré ou supprimé entre temps
    Alors le contenu n'est pas renouvelé
    Et sera supprimé immédiatement du device
    Et l'utilisateur voit "1 contenu retiré (violation règles)"

  Scénario: Mise à jour métadonnées lors du renouvellement
    Étant donné qu'un contenu téléchargé est renouvelé
    Quand le backend traite le renouvellement
    Alors les métadonnées sont mises à jour:
      | métadonnée            | mise à jour si changée |
      | Titre                 | ✅                     |
      | Nom créateur          | ✅                     |
      | Description           | ✅                     |
      | Tags                  | ✅                     |
      | Statut Premium        | ✅                     |
    Et l'utilisateur voit les infos à jour

  Scénario: Pas de re-téléchargement audio si fichier OK
    Étant donné qu'un contenu est renouvelé
    Quand le fichier audio local est intact
    Alors seules les métadonnées sont mises à jour
    Et le fichier audio n'est pas re-téléchargé
    Et cela économise la bande passante

  Scénario: Re-téléchargement audio si fichier corrompu
    Étant donné qu'un contenu est renouvelé
    Quand le fichier audio local est corrompu (checksum invalide)
    Alors le fichier audio est re-téléchargé entièrement
    Et le nouveau fichier remplace le corrompu

  Scénario: Renouvellement silencieux si WiFi régulier
    Étant donné que je me connecte en WiFi tous les jours
    Quand mes contenus atteignent 25-30 jours
    Alors ils sont automatiquement renouvelés en arrière-plan
    Et je ne vois aucune notification (processus transparent)
    Et mes contenus restent valides indéfiniment

  Scénario: Renouvellement batch de plusieurs contenus
    Étant donné que j'ai 30 contenus à renouveler
    Quand le renouvellement automatique se déclenche
    Alors une requête batch est envoyée:
      ```json
      POST /offline/contents/refresh
      {
        "content_ids": ["abc123", "def456", "ghi789", ...]
      }
      ```
    Et le backend traite les 30 contenus en une seule requête
    Et cela économise les requêtes HTTP

  Scénario: Temps de traitement renouvellement
    Étant donné que 30 contenus sont à renouveler
    Quand la requête batch est traitée
    Alors le backend répond en <2 secondes
    Et les métadonnées sont mises à jour localement
    Et l'utilisateur ne remarque aucun ralentissement

  # ===== NOTIFICATIONS EXPIRATION =====

  Scénario: Notification J-3 avant expiration
    Étant donné que j'ai 15 contenus qui expirent dans 3 jours
    Quand le système vérifie les expirations
    Alors je reçois une notification:
      """
      ⚠️ 15 contenus expirent dans 3 jours

      Connectez-vous en WiFi pour les renouveler automatiquement.
      """
    Et je peux agir avant l'expiration

  Scénario: Pas de notification si connexion WiFi régulière
    Étant donné que je me connecte en WiFi tous les jours
    Et que mes contenus sont automatiquement renouvelés
    Quand le système vérifie les expirations
    Alors aucune notification J-3 n'est envoyée
    Car les contenus sont déjà renouvelés silencieusement

  Scénario: Notification uniquement si contenus non renouvelés
    Étant donné que j'ai 20 contenus dont 15 renouvelés et 5 non renouvelés
    Quand le J-3 arrive pour les 5 non renouvelés
    Alors je reçois "5 contenus expirent dans 3 jours"
    Et seuls les contenus à risque sont mentionnés

  Scénario: Action utilisateur après notification J-3
    Étant donné que je reçois la notification J-3
    Quand je clique sur la notification
    Alors l'app s'ouvre sur la page Téléchargements
    Et je vois les contenus qui vont expirer en rouge
    Et je peux me connecter en WiFi pour les renouveler

  Scénario: Suppression automatique J-0 (expiration)
    Étant donné qu'un contenu n'a pas été renouvelé
    Quand le jour d'expiration arrive (J-0)
    Alors le fichier est automatiquement supprimé du device
    Et l'espace disque est libéré
    Et le compteur est décrémenté (ex: 45/50 → 44/50)

  Scénario: Toast après suppression automatique J-0
    Étant donné que 15 contenus viennent d'expirer
    Quand l'utilisateur ouvre l'app
    Alors il voit un toast:
      """
      🗑️ 15 contenus expirés ont été supprimés

      Reconnectez-vous en WiFi régulièrement pour éviter les expirations.
      """

  Scénario: Liste contenus supprimés après expiration
    Étant donné que 15 contenus ont expiré
    Quand je consulte l'historique des suppressions
    Alors je vois la liste des 15 contenus supprimés:
      | titre                | créateur    | date expiration |
      | Mon épisode préféré  | JeanDupont  | 15 juin 2025    |
      | Road trip Bretagne   | MarieLambert| 15 juin 2025    |
      | ...                  | ...         | ...             |
    Et je peux les re-télécharger si je veux

  Scénario: Re-téléchargement après expiration
    Étant donné qu'un contenu a expiré et été supprimé
    Quand je retrouve ce contenu dans l'app
    Alors le badge ✅ "Offline" n'est plus affiché
    Et je peux le re-télécharger normalement
    Et la validité repart à 30 jours

  # ===== CAS PARTICULIERS =====

  Scénario: Utilisateur ne se connecte jamais pendant 30 jours
    Étant donné que je télécharge 50 contenus le 1er juin
    Mais que je ne me connecte jamais en WiFi pendant 30 jours
    Quand le 1er juillet arrive
    Alors tous les 50 contenus expirent
    Et sont automatiquement supprimés
    Et je n'ai plus aucun contenu offline

  Scénario: Utilisateur en zone blanche 30+ jours
    Étant donné que je télécharge 50 contenus avant de partir en zone sans réseau
    Et que je reste 45 jours sans connexion
    Quand les contenus expirent après 30 jours
    Alors ils sont supprimés même si je ne peux pas me connecter
    Et je perds l'accès à mes contenus offline

  Scénario: Recommandation téléchargement avant zone blanche longue
    Étant donné que je prépare un road trip de 60 jours
    Quand je consulte la FAQ
    Alors je vois la recommandation:
      """
      ⚠️ Road trips >30 jours

      Les contenus téléchargés expirent après 30 jours.
      Pour les longs voyages sans connexion:
      • Téléchargez de nouveaux contenus tous les 25 jours si possible
      • Ou planifiez une reconnexion WiFi tous les 25 jours
      """

  Scénario: Changement statut Premium en gratuit pendant validité
    Étant donné que je suis Premium et j'ai téléchargé 200 contenus
    Quand mon abonnement Premium expire
    Et que je repasse en gratuit
    Alors au prochain renouvellement, seulement 50 contenus sont conservés
    Et les 150 autres sont supprimés (limite gratuit)
    Et je vois "Limite gratuit (50 contenus) appliquée. 150 contenus supprimés."

  Scénario: Sélection automatique 50 meilleurs contenus si passage gratuit
    Étant donné que je repasse en gratuit avec 200 contenus téléchargés
    Quand le système applique la limite de 50
    Alors les 50 contenus les plus récemment écoutés sont conservés
    Et les 150 autres sont supprimés
    Et cela maximise les chances de garder les contenus que j'aime

  Scénario: Contenus Premium exclusifs supprimés si abonnement expire
    Étant donné que j'ai téléchargé 20 contenus Premium exclusifs
    Quand mon abonnement Premium expire
    Alors les 20 contenus Premium sont immédiatement supprimés
    Car ils ne sont accessibles qu'aux abonnés Premium actifs
    Et je vois "20 contenus Premium supprimés (abonnement expiré)"

  # ===== STATISTIQUES ET MONITORING =====

  Scénario: Affichage temps restant avant expiration
    Étant donné que j'ai 45 contenus téléchargés
    Quand je consulte la page Téléchargements
    Alors je vois pour chaque contenu:
      | contenu             | temps restant        |
      | Mon épisode (récent)| Expire dans 28 jours |
      | Road trip (ancien)  | Expire dans 3 jours  |
    Et je sais lesquels sont prioritaires pour renouvellement

  Scénario: Tri par date expiration
    Étant donné que j'ai 45 contenus avec différentes dates d'expiration
    Quand je trie par "Expiration"
    Alors les contenus qui expirent le plus tôt apparaissent en premier
    Et je peux voir rapidement lesquels nécessitent une reconnexion urgente

  Scénario: Badge rouge si expiration <3 jours
    Étant donné qu'un contenu expire dans 2 jours
    Quand je consulte la liste des téléchargements
    Alors le contenu a un badge rouge "⚠️ Expire bientôt"
    Et il est visuellement mis en avant

  Scénario: Statistiques utilisateur - Taux de renouvellement
    Étant donné que j'accède à mes statistiques
    Quand je consulte la section Téléchargements
    Alors je vois:
      | métrique                        | valeur |
      | Contenus actuels                | 45     |
      | Contenus expirés depuis début   | 87     |
      | Contenus renouvelés (auto)      | 234    |
      | Taux renouvellement automatique | 73%    |

  Scénario: Statistiques admin - Taux expiration global
    Étant donné qu'un admin consulte les métriques offline
    Quand il accède au dashboard
    Alors il voit:
      | métrique                          | valeur    |
      | Contenus téléchargés actifs       | 1,234,567 |
      | Expirations ce mois               | 45,678    |
      | Taux expiration                   | 3.7%      |
      | Renouvellements automatiques/mois | 234,567   |

  Scénario: Alerte admin si taux expiration >10%
    Étant donné que le taux d'expiration mensuel dépasse 10%
    Quand le système détecte cette anomalie
    Alors une alerte est envoyée:
      """
      ⚠️ Taux d'expiration anormal: 12.3%

      Nombre expirations ce mois: 152,345
      Causes possibles:
      - Utilisateurs ne se connectent plus en WiFi
      - Problème renouvellement automatique ?
      - Churn utilisateurs augmenté ?

      Action recommandée: Enquête technique + email rappel utilisateurs
      """

  Scénario: Email rappel si pas de connexion WiFi depuis 20 jours
    Étant donné que je n'ai pas connecté l'app en WiFi depuis 20 jours
    Et que j'ai 45 contenus téléchargés
    Quand le système détecte cette inactivité WiFi
    Alors je reçois un email:
      """
      📡 Connectez-vous en WiFi pour conserver vos téléchargements

      Vous n'avez pas connecté RoadWave en WiFi depuis 20 jours.
      Vos 45 contenus téléchargés expireront dans 10 jours si non renouvelés.

      Connectez-vous en WiFi avant le 30 juin pour les renouveler automatiquement.
      """

  Scénario: Performance renouvellement avec 10 000 utilisateurs simultanés
    Étant donné que 10 000 utilisateurs se connectent en WiFi simultanément
    Quand chacun demande le renouvellement de 50 contenus
    Alors le serveur traite 500 000 vérifications
    Et grâce au cache Redis et index PostgreSQL, le temps de réponse reste <3s
    Et les serveurs gèrent la charge sans problème

  Scénario: Logs audit renouvellements
    Étant donné qu'un contenu est renouvelé
    Quand l'opération se termine
    Alors un log est enregistré:
      | timestamp           | user_id | content_id | action    | résultat       |
      | 2025-06-15 14:30:00 | abc123  | xyz789     | renew     | success (+30d) |
      | 2025-06-15 14:30:01 | abc123  | def456     | renew     | failed (deleted)|
    Et ces logs aident à débugger les problèmes
