# language: fr
Fonctionnalité: Upload et encodage de contenu audio
  En tant que créateur
  Je veux uploader mon contenu audio
  Afin qu'il soit encodé et disponible pour les auditeurs

  Contexte:
    Étant donné que l'API RoadWave est disponible
    Et que je suis un créateur connecté

  Scénario: Upload fichier MP3 valide
    Quand j'uploade un fichier MP3 de 50 MB et 30 minutes
    Alors l'upload réussit
    Et le fichier est envoyé vers OVH Object Storage temporaire
    Et un job d'encodage asynchrone est lancé

  Scénario: Upload fichier AAC valide (.aac)
    Quand j'uploade un fichier AAC de 80 MB et 1 heure
    Alors l'upload réussit
    Et le fichier est accepté
    Et l'encodage démarre

  Scénario: Upload fichier M4A valide
    Quand j'uploade un fichier M4A de 100 MB et 2 heures
    Alors l'upload réussit
    Et le fichier est traité comme AAC
    Et l'encodage démarre

  Scénario: Rejet fichier WAV (non supporté)
    Quand j'essaie d'uploader un fichier WAV
    Alors l'upload échoue
    Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)"

  Scénario: Rejet fichier FLAC (non supporté)
    Quand j'essaie d'uploader un fichier FLAC
    Alors l'upload échoue
    Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)"

  Scénario: Validation taille maximale 200 MB
    Quand j'essaie d'uploader un fichier MP3 de 201 MB
    Alors l'upload échoue
    Et je vois le message "Fichier trop volumineux (max 200 MB)"

  Scénario: Upload à la limite de 200 MB accepté
    Quand j'uploade un fichier MP3 de exactement 200 MB
    Alors l'upload réussit
    Et le fichier est accepté

  Scénario: Validation durée maximale 4 heures
    Quand j'essaie d'uploader un fichier de 4h 10min
    Alors l'upload échoue
    Et je vois le message "Durée trop longue (max 4 heures)"

  Scénario: Upload à la limite de 4h accepté
    Quand j'uploade un fichier de exactement 4 heures
    Alors l'upload réussit
    Et le fichier est accepté

  Scénario: Validation format côté client
    Quand je sélectionne un fichier dans l'interface
    Alors la validation du format est faite immédiatement côté client
    Et je suis informé avant même de lancer l'upload si le format est invalide

  Scénario: Double validation côté backend
    Étant donné qu'un fichier a passé la validation client
    Quand le backend reçoit le fichier
    Alors une validation supplémentaire est effectuée
    Et le format et l'intégrité sont vérifiés

  Scénario: Pipeline d'encodage - étape 1 upload
    Quand j'uploade un fichier MP3 valide
    Alors le fichier est stocké temporairement dans OVH Object Storage
    Et un job d'encodage est mis en file d'attente

  Scénario: Pipeline d'encodage - validation format
    Étant donné qu'un job d'encodage est lancé
    Quand le worker Go traite le fichier
    Alors le format est validé avec FFmpeg
    Et l'intégrité du fichier est vérifiée

  Scénario: Pipeline d'encodage - génération 3 profils Opus
    Étant donné qu'un fichier audio est validé
    Quand l'encodage démarre
    Alors 3 profils Opus sont générés:
      | qualité  | bitrate | usage     |
      | Basse    | 24 kbps | 2G/Edge   |
      | Standard | 48 kbps | 3G        |
      | Haute    | 64 kbps | 4G/5G     |

  Scénario: Pipeline d'encodage - génération segments HLS
    Étant donné que les profils Opus sont générés
    Quand l'encodage continue
    Alors un fichier manifest .m3u8 est créé
    Et des segments .ts sont générés
    Et le contenu est prêt pour streaming HLS

  Scénario: Pipeline d'encodage - génération image par défaut
    Étant donné que l'encodage est en cours
    Quand les métadonnées sont traitées
    Alors une image de couverture par défaut est générée
    Et l'image fait 800×800px au format PNG

  Scénario: Pipeline d'encodage - suppression fichier original
    Étant donné que l'encodage est terminé avec succès
    Quand tous les fichiers de sortie sont générés
    Alors le fichier original MP3/AAC est supprimé
    Et seuls les profils Opus et HLS sont conservés
    Et l'espace de stockage est économisé

  Scénario: Temps d'encodage contenu 5 minutes
    Étant donné qu'un fichier de 5 minutes est uploadé
    Quand l'encodage démarre
    Alors l'encodage prend environ 30 secondes
    Et je reçois une notification "Contenu prêt à publier"

  Scénario: Temps d'encodage podcast 1 heure
    Étant donné qu'un fichier de 1 heure est uploadé
    Quand l'encodage démarre
    Alors l'encodage prend environ 5 minutes
    Et une barre de progression est affichée

  Scénario: Temps d'encodage podcast 4 heures
    Étant donné qu'un fichier de 4 heures est uploadé
    Quand l'encodage démarre
    Alors l'encodage prend environ 20 minutes
    Et je peux fermer l'app (traitement asynchrone)

  Scénario: Notification "Contenu prêt à publier"
    Étant donné que mon contenu est en cours d'encodage
    Quand l'encodage se termine avec succès
    Alors je reçois une notification push "✅ Votre contenu est prêt à publier"
    Et je peux accéder à l'interface de publication

  Scénario: Échec d'encodage - fichier corrompu
    Étant donné qu'un fichier MP3 corrompu est uploadé
    Quand l'encodage démarre
    Alors l'encodage échoue
    Et je reçois une notification "❌ Erreur d'encodage: fichier corrompu"
    Et le fichier temporaire est supprimé

  Scénario: Écoute accélérée - vitesses disponibles
    Étant donné qu'un contenu est publié
    Quand un auditeur écoute le contenu
    Alors il peut choisir parmi les vitesses:
      | vitesse | usage                                  |
      | 0.75x   | Compréhension difficile                |
      | 1.0x    | Normal (défaut)                        |
      | 1.25x   | Gain léger                             |
      | 1.5x    | Podcasts longs                         |
      | 2.0x    | Survol rapide                          |

  Scénario: Écoute accélérée pour modérateurs
    Étant donné que je suis un modérateur
    Et qu'un contenu de 30 secondes est à valider
    Quand je l'écoute à 2.0x
    Alors je termine l'écoute en 15 secondes
    Et ma productivité est doublée

  Scénario: Écoute accélérée pour auditeurs
    Étant donné que je suis un auditeur
    Et qu'un podcast de 1 heure est disponible
    Quand je configure la vitesse à 1.5x
    Alors j'écoute le podcast en 40 minutes
    Et je gagne 20 minutes

  Scénario: Sauvegarde préférence vitesse d'écoute
    Étant donné que je configure la vitesse à 1.5x
    Quand j'écoute plusieurs contenus
    Alors tous les contenus sont lus à 1.5x par défaut
    Et ma préférence est sauvegardée

  Scénario: Scalabilité horizontale des workers
    Étant donné que 100 contenus sont uploadés simultanément
    Quand les jobs d'encodage sont distribués
    Alors plusieurs workers Go traitent les jobs en parallèle
    Et Kubernetes scale automatiquement les pods
    Et tous les contenus sont encodés sans délai excessif

  Scénario: Statut d'encodage visible
    Étant donné que mon contenu est en cours d'encodage
    Quand je consulte mes contenus
    Alors je vois le statut:
      | état        | affichage                      |
      | En attente  | ⏳ File d'attente               |
      | En cours    | ⚙️ Encodage en cours (45%)     |
      | Terminé     | ✅ Prêt à publier              |
      | Échec       | ❌ Erreur - Réessayer          |

  Scénario: Réessayer après échec d'encodage
    Étant donné que l'encodage de mon contenu a échoué
    Quand je clique sur "Réessayer"
    Alors un nouveau job d'encodage est lancé
    Et je peux tenter à nouveau

  Scénario: Timeout upload après 30 minutes
    Étant donné que mon upload dure plus de 30 minutes
    Quand le timeout est atteint
    Alors l'upload est annulé
    Et je vois le message "Upload interrompu, veuillez réessayer"
    Et je peux reprendre l'upload

  Scénario: Reprise upload après interruption réseau
    Étant donné que mon upload a échoué à 75%
    Quand je clique sur "Reprendre"
    Alors l'upload reprend à partir de 75%
    Et le fichier partiel est conservé temporairement

  Scénario: Limite de 3 uploads simultanés
    Étant donné que j'ai déjà 3 uploads en cours
    Quand j'essaie d'uploader un 4ème fichier
    Alors l'upload est refusé
    Et je vois le message "Maximum 3 uploads simultanés. Attendez qu'un upload se termine."

  Scénario: Détection fichier corrompu pendant upload
    Étant donné que j'uploade un fichier MP3 corrompu
    Quand le backend détecte la corruption
    Alors l'upload est rejeté immédiatement
    Et je vois le message "Fichier corrompu, veuillez vérifier votre fichier"
    Et je n'attends pas la fin de l'encodage

  Scénario: Fichier original conservé pendant 48h après échec
    Étant donné que mon encodage a échoué
    Quand je clique sur "Réessayer" dans les 48h
    Alors le fichier original est encore disponible
    Et un nouvel encodage démarre sans réupload

  Scénario: Fichier original supprimé après 48h
    Étant donné que mon encodage a échoué il y a 48h
    Quand j'essaie de réessayer
    Alors je dois réuploader le fichier
    Et je vois le message "Fichier original expiré, veuillez réuploader"
