# language: fr
Fonctionnalité: Gestion abonnement Premium
  En tant qu'utilisateur
  Je veux gérer facilement mon abonnement Premium
  Afin de souscrire, renouveler ou annuler en toute transparence

  Contexte:
    Étant donné que je suis connecté à l'application RoadWave

  # ===== SOUSCRIPTION =====

  Scénario: Souscription via Web (desktop/mobile) avec Mangopay
    Étant donné que je consulte la page Premium sur le site web
    Quand je clique sur "S'abonner - Mensuel 4.99€"
    Alors je suis redirigé vers le formulaire de paiement Mangopay
    Et je saisis mes informations de carte bancaire
    Et le paiement de 4.99€ est prélevé immédiatement
    Et la commission Mangopay est de 1.8% + 0.18€ = 0.27€
    Et RoadWave reçoit 4.72€ net

  Scénario: Calcul commission Mangopay
    Étant donné qu'un utilisateur paie 4.99€ via Mangopay
    Quand la commission est calculée
    Alors la commission est : 4.99€ × 1.8% + 0.18€ = 0.09€ + 0.18€ = 0.27€
    Et RoadWave reçoit : 4.99€ - 0.27€ = 4.72€
    Et la commission représente 5.4% du prix

  Scénario: Souscription via iOS App avec Apple IAP
    Étant donné que j'utilise l'app iOS
    Quand je clique sur "S'abonner - Mensuel 5.99€"
    Alors je suis redirigé vers l'interface Apple In-App Purchase
    Et le prix affiché est 5.99€ (majoré de 20%)
    Et le paiement est effectué via mon compte Apple
    Et Apple prend 30% de commission = 1.80€
    Et RoadWave reçoit 4.19€ net

  Scénario: Souscription via Android App avec Google Play Billing
    Étant donné que j'utilise l'app Android
    Quand je clique sur "S'abonner - Mensuel 5.99€"
    Alors je suis redirigé vers l'interface Google Play Billing
    Et le prix affiché est 5.99€ (majoré de 20%)
    Et le paiement est effectué via mon compte Google
    Et Google prend 30% de commission = 1.80€
    Et RoadWave reçoit 4.19€ net

  Scénario: Majoration 20% sur mobile pour compenser commission 30%
    Étant donné que Apple/Google prennent 30% de commission
    Quand RoadWave fixe le prix mobile
    Alors le prix web est 4.99€ (commission Mangopay 5.4%)
    Et le prix mobile est 5.99€ (commission Apple/Google 30%)
    Et la majoration est de 1€ (+20%)
    Et cela compense partiellement la commission excessive

  Scénario: Email incitation souscription web moins chère
    Étant donné que je consulte Premium depuis l'app mobile
    Quand je vois le prix 5.99€
    Alors je vois aussi un message:
      """
      💡 Astuce : Abonnez-vous sur roadwave.com pour seulement 4.99€/mois
      Économisez 12€/an en évitant les frais Apple/Google !
      """
    Et un lien vers le site web est fourni

  Scénario: Calcul économie souscription web vs mobile
    Étant donné que le prix web est 4.99€/mois
    Et que le prix mobile est 5.99€/mois
    Quand je calcule l'économie annuelle
    Alors web : 4.99€ × 12 = 59.88€/an
    Et mobile : 5.99€ × 12 = 71.88€/an
    Et économie : 12€/an (soit 20% d'économie)

  Scénario: Activation immédiate après paiement réussi
    Étant donné que je viens de payer mon abonnement Premium
    Quand le paiement est confirmé
    Alors mon statut passe immédiatement à "Premium"
    Et je peux accéder aux avantages Premium dès maintenant
    Et je reçois un email de confirmation

  Scénario: Email confirmation souscription
    Étant donné que j'ai souscrit à Premium
    Quand la souscription est confirmée
    Alors je reçois un email:
      """
      🎉 Bienvenue Premium !

      Votre abonnement Premium est actif.

      Formule: Mensuel 4.99€/mois
      Prochain renouvellement: 15 juillet 2025

      Vos avantages:
      • 0 publicité
      • Contenus exclusifs
      • Qualité audio 64 kbps
      • Téléchargements illimités
      • Historique illimité

      Profitez pleinement de RoadWave !

      Gérer mon abonnement: [Lien]
      """

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

  Scénario: Email rappel 7 jours avant renouvellement
    Étant donné que mon abonnement mensuel se renouvelle le 15 juillet
    Quand le 8 juillet arrive (7 jours avant)
    Alors je reçois un email de rappel:
      """
      📅 Votre abonnement Premium se renouvelle dans 7 jours

      Formule: Mensuel 4.99€/mois
      Date de renouvellement: 15 juillet 2025
      Montant: 4.99€

      Votre carte bancaire sera débitée automatiquement.

      Vous souhaitez annuler ? [Gérer mon abonnement]
      """

  Scénario: Renouvellement automatique réussi
    Étant donné que mon abonnement mensuel arrive à échéance le 15 juillet
    Quand le 15 juillet arrive
    Alors Mangopay/Apple/Google prélève automatiquement 4.99€ (ou 5.99€)
    Et mon abonnement est renouvelé pour 1 mois supplémentaire
    Et je reçois un email de confirmation

  Scénario: Email confirmation renouvellement
    Étant donné que mon abonnement vient d'être renouvelé
    Quand le paiement est confirmé
    Alors je reçois un email:
      """
      ✅ Abonnement Premium renouvelé

      Votre abonnement a été renouvelé avec succès.

      Montant débité: 4.99€
      Prochaine échéance: 15 août 2025

      Merci de continuer à soutenir RoadWave et ses créateurs !

      Gérer mon abonnement: [Lien]
      """

  Scénario: Échec paiement renouvellement - Tentative 1
    Étant donné que mon abonnement doit se renouveler le 15 juillet
    Mais que ma carte bancaire est expirée ou sans fonds
    Quand le prélèvement échoue
    Alors je reçois un email:
      """
      ⚠️ Échec renouvellement abonnement Premium

      Le paiement de votre abonnement a échoué.
      Raison: Carte bancaire expirée

      Nous allons réessayer automatiquement dans 3 jours.
      Veuillez mettre à jour vos informations de paiement: [Lien]

      Votre accès Premium reste actif jusqu'au 22 juillet (7 jours).
      """

  Scénario: Retry automatique paiement après 3 jours
    Étant donné que le paiement a échoué le 15 juillet
    Quand le 18 juillet arrive (J+3)
    Alors Mangopay/Apple/Google tente automatiquement un nouveau prélèvement
    Et si le paiement réussit, l'abonnement est renouvelé normalement
    Et si le paiement échoue encore, un 2ème retry est programmé

  Scénario: Retry automatique paiement après 7 jours
    Étant donné que 2 tentatives ont échoué (15 juillet et 18 juillet)
    Quand le 22 juillet arrive (J+7)
    Alors une 3ème et dernière tentative est effectuée
    Et si le paiement réussit, l'abonnement est sauvé
    Et si le paiement échoue, l'abonnement est annulé automatiquement

  Scénario: Annulation automatique après 3 échecs paiement
    Étant donné que les 3 tentatives de renouvellement ont échoué (J+0, J+3, J+7)
    Quand la 3ème tentative échoue
    Alors mon abonnement Premium est annulé automatiquement
    Et mon statut repasse à "Gratuit"
    Et je perds accès aux avantages Premium
    Et je reçois un email d'annulation

  Scénario: Email annulation automatique pour impayé
    Étant donné que mon abonnement a été annulé pour échec paiement
    Quand l'annulation devient effective
    Alors je reçois un email:
      """
      ❌ Abonnement Premium annulé

      Votre abonnement a été annulé suite à 3 échecs de paiement.

      Vous repassez en mode gratuit et perdez l'accès à:
      • Contenus Premium exclusifs
      • Qualité audio supérieure
      • Téléchargements illimités

      Pour réactiver Premium, mettez à jour vos informations de paiement: [Lien]
      """

  # ===== ANNULATION =====

  Scénario: Annulation self-service dans Settings
    Étant donné que je veux annuler mon abonnement
    Quand j'accède à "Paramètres > Abonnement"
    Alors je vois un bouton "Annuler l'abonnement"
    Et je peux annuler en 2 clics sans contacter le support

  Scénario: Confirmation avant annulation
    Étant donné que je clique sur "Annuler l'abonnement"
    Quand une popup de confirmation apparaît
    Alors je vois:
      """
      😢 Vous allez annuler votre abonnement Premium

      Vous perdrez l'accès à:
      • 0 publicité
      • Contenus Premium exclusifs
      • Qualité audio supérieure
      • Téléchargements illimités

      Accès maintenu jusqu'au: 15 juillet 2025 (fin période payée)
      Pas de remboursement prorata.

      [Confirmer l'annulation]  [Rester Premium]
      ```

  Scénario: Accès Premium maintenu jusqu'à fin période payée
    Étant donné que j'ai annulé mon abonnement le 1er juillet
    Et que mon abonnement mensuel était valable jusqu'au 15 juillet
    Quand l'annulation est confirmée
    Alors je garde l'accès Premium jusqu'au 15 juillet
    Et à partir du 16 juillet, je repasse en gratuit
    Et je ne suis pas remboursé pour les 14 jours restants

  Scénario: Justification pas de remboursement prorata
    Étant donné que l'industrie (Spotify, Netflix, YouTube) ne rembourse pas prorata
    Quand RoadWave applique la même règle
    Alors c'est le standard accepté par les utilisateurs
    Et cela simplifie la gestion comptable
    Et évite les abus (souscription puis annulation immédiate pour remboursement)

  Scénario: Email confirmation annulation
    Étant donné que j'ai annulé mon abonnement
    Quand l'annulation est enregistrée
    Alors je reçois un email:
      """
      ✅ Annulation confirmée

      Votre abonnement Premium a été annulé.

      Accès Premium maintenu jusqu'au: 15 juillet 2025
      Après cette date, vous repasserez en mode gratuit.

      Pas de remboursement pour la période restante (standard industrie).

      Vous pouvez vous réabonner à tout moment !

      Nous espérons vous revoir bientôt.
      Réabonner: [Lien]
      """

  Scénario: Pas de renouvellement après annulation
    Étant donné que j'ai annulé mon abonnement le 1er juillet
    Quand le 15 juillet arrive (date de renouvellement prévue)
    Alors aucun prélèvement n'est effectué
    Et mon statut passe automatiquement à "Gratuit"
    Et je ne reçois pas d'email de renouvellement

  # ===== RÉABONNEMENT =====

  Scénario: Réabonnement possible immédiatement
    Étant donné que j'ai annulé mon abonnement il y a 5 jours
    Quand j'accède à la page Premium
    Alors je peux me réabonner immédiatement
    Et le processus de paiement est le même que la première fois

  Scénario: Pas de nouvelle période d'essai au réabonnement
    Étant donné que j'ai annulé mon abonnement il y a 3 mois
    Quand je me réabonne
    Alors je paie immédiatement 4.99€ (pas d'essai gratuit)
    Car RoadWave ne propose jamais d'essai gratuit (ni première fois ni réabonnement)

  Scénario: Offre win-back pour utilisateurs ayant annulé
    Étant donné que j'ai annulé mon abonnement il y a 1 mois
    Quand je reçois un email de win-back
    Alors je vois une offre spéciale:
      """
      🎁 On vous a manqué ?

      Revenez en Premium avec une offre exclusive:
      -30% sur les 3 premiers mois (3.49€/mois au lieu de 4.99€)

      Offre valable jusqu'au 31 juillet.

      [Réactiver Premium]
      ```

  # ===== ARCHITECTURE DONNÉES =====

  Scénario: Table subscriptions en base PostgreSQL
    Étant donné qu'un utilisateur souscrit à Premium
    Quand les données sont enregistrées
    Alors la table subscriptions contient:
      ```sql
      CREATE TABLE subscriptions (
          id UUID PRIMARY KEY,
          user_id UUID NOT NULL REFERENCES users(id) UNIQUE,
          mangopay_recurring_payin_id VARCHAR(255), -- Null si IAP
          mangopay_user_id VARCHAR(255),            -- Null si IAP
          apple_transaction_id VARCHAR(255),        -- Null si Mangopay
          google_purchase_token VARCHAR(255),       -- Null si Mangopay
          status VARCHAR(50) NOT NULL,              -- 'active', 'cancelled', 'expired', 'past_due'
          plan VARCHAR(50) NOT NULL,                -- 'monthly', 'yearly'
          current_period_start TIMESTAMP NOT NULL,
          current_period_end TIMESTAMP NOT NULL,
          cancelled_at TIMESTAMP,
          created_at TIMESTAMP NOT NULL DEFAULT NOW()
      );
      ```

  Scénario: Statuts possibles dans subscription.status
    Étant donné qu'un abonnement peut avoir différents statuts
    Quand le statut est stocké en base
    Alors les valeurs possibles sont:
      | statut      | description                                    |
      | active      | Abonnement actif et payé                       |
      | cancelled   | Annulé par utilisateur (accès jusqu'à fin période) |
      | expired     | Période terminée, pas renouvelé                |
      | past_due    | Échec paiement, en retry automatique           |

  Scénario: Cache Redis pour vérification Premium temps réel
    Étant donné qu'un utilisateur lance un contenu
    Quand l'app vérifie s'il est Premium
    Alors une clé Redis est consultée:
      ```
      Key: premium:{user_id}
      Value: true/false
      TTL: 1 heure
      ```
    Et si la clé n'existe pas, elle est recalculée depuis PostgreSQL
    Et cela garantit des performances <10ms

  Scénario: Refresh cache Redis via webhooks
    Étant donné qu'un paiement est confirmé par Mangopay/Apple/Google
    Quand un webhook est reçu par RoadWave
    Alors le cache Redis premium:{user_id} est mis à jour immédiatement
    Et l'utilisateur voit son statut Premium activé sans délai

  Scénario: Webhooks Mangopay - PAYIN_NORMAL_SUCCEEDED
    Étant donné qu'un paiement Mangopay réussit
    Quand Mangopay envoie le webhook PAYIN_NORMAL_SUCCEEDED
    Alors RoadWave met à jour subscriptions.status = 'active'
    Et met à jour current_period_end = NOW() + 1 mois
    Et refresh le cache Redis premium:{user_id} = true

  Scénario: Webhooks Mangopay - PAYIN_NORMAL_FAILED
    Étant donné qu'un paiement Mangopay échoue
    Quand Mangopay envoie le webhook PAYIN_NORMAL_FAILED
    Alors RoadWave met à jour subscriptions.status = 'past_due'
    Et programme un retry automatique dans 3 jours
    Et envoie un email à l'utilisateur

  Scénario: Webhooks Apple - App Store Server Notifications
    Étant donné qu'un paiement Apple IAP change de statut
    Quand Apple envoie une notification serveur
    Alors RoadWave parse la notification (JSON)
    Et met à jour la subscription en conséquence
    Et refresh le cache Redis

  Scénario: Webhooks Google - Real-time Developer Notifications
    Étant donné qu'un paiement Google Play change de statut
    Quand Google envoie une notification temps réel
    Alors RoadWave parse la notification (JSON)
    Et met à jour la subscription en conséquence
    Et refresh le cache Redis

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

  Scénario: Dashboard admin - Métriques abonnements
    Étant donné qu'un admin consulte les métriques Premium
    Quand il accède au dashboard
    Alors il voit:
      | métrique                          | valeur      |
      | Abonnés actifs                    | 12,547      |
      | Nouveaux abonnements ce mois      | 1,234       |
      | Annulations ce mois               | 287 (2.3%)  |
      | Churn rate mensuel                | 2.3%        |
      | MRR (Revenus mensuels récurrents) | 58,890€     |
      | Taux conversion gratuit → Premium | 8.5%        |

  Scénario: Calcul churn rate mensuel
    Étant donné que 287 utilisateurs ont annulé ce mois
    Et qu'il y avait 12,547 abonnés au début du mois
    Quand le churn rate est calculé
    Alors churn = 287 / 12,547 = 2.3%
    Et un churn <5% est considéré comme excellent
    Et RoadWave surveille cette métrique de près

  Scénario: Alerte si churn rate >5%
    Étant donné que le churn rate mensuel dépasse 5%
    Quand le système détecte cette anomalie
    Alors une alerte est envoyée à l'équipe:
      """
      ⚠️ Churn rate anormal: 6.2%

      Nombre annulations ce mois: 778
      Causes principales:
      - Prix jugé trop élevé: 42%
      - Utilisation faible: 28%
      - Concurrent moins cher: 18%
      - Autre: 12%

      Action recommandée: Enquête satisfaction + offres win-back
      """

  Scénario: Enquête satisfaction à l'annulation
    Étant donné que je viens d'annuler mon abonnement
    Quand l'annulation est confirmée
    Alors je vois un questionnaire rapide:
      """
      Pourquoi annulez-vous Premium ?

      ☐ Prix trop élevé
      ☐ Je n'utilise pas assez RoadWave
      ☐ Pas assez de contenus exclusifs
      ☐ Problèmes techniques
      ☐ J'ai trouvé une alternative moins chère
      ☐ Autre: [Texte libre]

      [Envoyer]  [Ignorer]
      ```
    Et les réponses aident à améliorer l'offre Premium

  Scénario: Répartition canaux souscription
    Étant donné qu'un admin analyse les canaux de souscription
    Quand il consulte les statistiques
    Alors il voit:
      | canal          | abonnés | % total | revenus/mois |
      | Web (Mangopay) | 8,234   | 65.6%   | 41,088€      |
      | iOS (Apple)    | 2,845   | 22.7%   | 17,042€      |
      | Android (Google)| 1,468  | 11.7%   | 8,793€       |
    Et cela aide à orienter les efforts marketing (inciter web = moins de commission)

  Scénario: Performance vérification Premium <10ms
    Étant donné que 100 000 utilisateurs consultent des contenus simultanément
    Quand chaque requête vérifie le statut Premium via Redis
    Alors le temps de réponse moyen est <10ms
    Et Redis gère facilement 100 000 requêtes/seconde
    Et l'expérience utilisateur est fluide

  Scénario: Backup données abonnements
    Étant donné que les données d'abonnements sont critiques
    Quand un backup est effectué
    Alors PostgreSQL est répliqué en temps réel sur un replica
    Et un snapshot quotidien est stocké sur S3
    Et en cas de crash, les données peuvent être restaurées <5 minutes
