# language: fr

@admin @moderation @outils
Fonctionnalité: Outils modérateur - Player audio et actions
  En tant que modérateur
  Je veux disposer d'outils performants pour traiter les signalements
  Afin de travailler efficacement et prendre des décisions éclairées

  # 14.4 - Outils modérateurs - Player audio, historique créateur, etc.

  Contexte:
    Étant donné que je suis connecté en tant que modérateur
    Et que j'examine un signalement

  # Page détaillée d'un signalement

  Scénario: Affichage de la page détails signalement
    Étant donné que je clique sur un signalement
    Quand la page de détails s'affiche
    Alors je vois toutes les sections:
      | section                    | position    | contenu                                    |
      | En-tête                    | Haut        | Titre contenu, créateur, priorité          |
      | Analyse IA                 | Bandeau     | Score IA, catégorie détectée, confiance    |
      | Player audio + waveform    | Centre-haut | Lecture audio avec visualisation           |
      | Transcription              | Centre      | Texte avec passages surlignés              |
      | Détails signalements       | Droite      | Liste signaleurs + commentaires            |
      | Historique créateur        | Bas-droite  | Contenus précédents, strikes, stats        |
      | Actions modérateur         | Bas         | Approuver, Rejeter, Escalader, Commenter   |
    Et toutes les sections sont chargées en <1 seconde

  Scénario: En-tête avec informations clés
    Étant donné que j'affiche les détails d'un signalement
    Quand je consulte l'en-tête
    Alors je vois:
      | information              | exemple                          | position       |
      | Numéro ticket            | #MOD-2026-00142                  | Haut gauche    |
      | Titre du contenu         | "Podcast #42 - Titre"            | Titre principal|
      | Créateur                 | @pseudo_createur (lien profil)   | Sous-titre     |
      | Catégorie contenu        | 🎙️ Podcast                      | Tag            |
      | Date publication         | Publié le 15/01/2026             | Sous-titre     |
      | Durée audio              | 12:34                            | Badge          |
      | Priorité signalement     | 🔴 CRITIQUE (score 95)           | Haut droite    |
      | Temps écoulé             | Signalé il y a 2h                | Badge orange   |
      | Assigné à                | @mod_alice (si assigné)          | Badge bleu     |
    Et je vois en un coup d'œil les informations essentielles

  # Analyse IA avec détails

  Scénario: Bandeau analyse IA
    Étant donné que l'IA a analysé le contenu
    Quand j'affiche le bandeau d'analyse
    Alors je vois les résultats:
      """
      🤖 Analyse IA

      Score de confiance: 97% 🔴 (Très élevé)
      Catégorie détectée: 🚫 Haine & violence
      Passages problématiques: 3 détectés

      Détails analyses:
      - Analyse sentiment: Négatif (score: -0.85)
      - Détection haine: Positif (score: 0.92)
      - Mots-clés interdits: 5 occurrences

      [Voir détails techniques]
      """
    Et un fond rouge clair indique un score élevé (>90%)
    Et je peux avoir confiance dans l'analyse IA

  Scénario: Détails techniques de l'analyse IA
    Étant donné que je clique sur "Voir détails techniques"
    Quand la modal s'affiche
    Alors je vois les détails complets:
      | analyse                  | modèle                       | score  | timestamp analyse |
      | Transcription            | Whisper large-v3             | 100%   | 14:32:15          |
      | Analyse sentiment        | distilbert-base-uncased      | -0.85  | 14:33:42          |
      | Détection haine          | facebook/roberta-hate-speech | 0.92   | 14:33:58          |
      | Mots-clés interdits      | Liste noire FR/EN            | 5 hits | 14:34:01          |
    Et je peux vérifier la fiabilité de l'analyse
    Et cela m'aide à prendre une décision

  # Player audio avec waveform

  Scénario: Affichage du player audio Wavesurfer.js
    Étant donné que j'ouvre la page de détails
    Quand le player audio se charge
    Alors je vois le player avec waveform:
      | élément                | description                                |
      | Waveform               | Visualisation audio complète               |
      | Passages surlignés     | Zones détectées par IA en rouge            |
      | Contrôles              | Play/Pause, volume, vitesse                |
      | Timeline               | 00:00 / 12:34                              |
      | Marqueurs              | Annotations aux timestamps problématiques  |
      | Vitesse lecture        | 0.75x, 1x, 1.5x, 2x                        |
    Et je peux écouter le contenu directement
    Et je peux me concentrer sur les passages signalés

  Scénario: Navigation rapide vers passages problématiques
    Étant donné que l'IA a détecté 3 passages problématiques
    Quand j'affiche le player
    Alors je vois 3 marqueurs rouges sur la waveform:
      | timestamp | type marqueur        | description                    |
      | 02:15     | Rouge IA (97%)       | "Insulte discriminatoire"      |
      | 03:42     | Rouge IA (92%)       | "Propos haineux"               |
      | 08:20     | Orange signaleur     | "Commentaire @user: 'ici aussi'"|
    Et je peux cliquer sur un marqueur pour sauter directement
    Et je gagne un temps précieux (pas besoin d'écouter tout)

  Scénario: Lecture accélérée pour gain productivité
    Étant donné que le contenu dure 30 minutes
    Quand je sélectionne la vitesse 2x
    Alors l'audio est accéléré sans déformation
    Et je peux écouter en 15 minutes au lieu de 30
    Et je peux revenir à 1x si nécessaire
    Et cela multiplie ma productivité par 2

  Scénario: Annotations directes sur la waveform
    Étant donné que j'écoute le contenu
    Et que je détecte un passage problématique à 05:30
    Quand je clique sur la waveform à 05:30
    Alors une modal s'affiche:
      """
      Ajouter une annotation

      Timestamp: 05:30
      Type: [Passage problématique ▼]
      Note: [Champ texte]

      [Annuler] [Ajouter]
      """
    Et je peux marquer le passage pour référence
    Et l'annotation apparaît sur la waveform
    Et elle sera visible dans le rapport de modération

  # Transcription avec surlignage

  Scénario: Affichage de la transcription complète
    Étant donné que l'IA a transcrit l'audio
    Quand j'affiche la transcription
    Alors je vois le texte complet:
      """
      [00:00] Bonjour à tous, bienvenue dans ce podcast...
      [02:15] ...et c'est pourquoi je pense que [ROUGE: phrase discriminatoire] mais bon...
      [03:42] ...vraiment, ces gens [ROUGE: propos haineux], vous voyez...
      [08:20] ...en conclusion, [ORANGE: passage signalé par @user]...
      """
    Et les passages problématiques sont surlignés
    Et je peux lire sans écouter (plus rapide)
    Et je peux copier/coller pour le rapport

  Scénario: Synchronisation transcription - audio
    Étant donné que je lis la transcription
    Quand je clique sur un timestamp dans la transcription
    Alors le player audio saute à ce timestamp
    Et la lecture démarre automatiquement
    Et la transcription scroll pour suivre la lecture
    Et je peux alterner lecture et écoute facilement

  Scénario: Recherche dans la transcription
    Étant donné que la transcription est affichée
    Quand je recherche un mot-clé "discriminatoire"
    Alors toutes les occurrences sont surlignées en jaune
    Et je vois "3 résultats trouvés"
    Et je peux naviguer entre les résultats avec ←/→
    Et je trouve rapidement les passages pertinents

  # Détails des signalements

  Scénario: Liste des signaleurs et leurs commentaires
    Étant donné qu'un contenu a été signalé par 6 utilisateurs
    Quand j'affiche la section "Signalements"
    Alors je vois la liste complète:
      | signaleur  | badge | fiabilité | catégorie        | commentaire             | date        |
      | @user1     | 🥇 Or | 95%       | Haine & violence | "Propos à 2:30"         | Il y a 2h   |
      | @user2     | 🥈 Ag | 87%       | Haine & violence | "Discriminatoire 2:15"  | Il y a 1h   |
      | @user3     | -     | 45%       | Haine & violence | ""                      | Il y a 45min|
      | @user4     | 🥉 Br | 72%       | Fausse info      | "Désinformation santé"  | Il y a 30min|
      | @user5     | -     | 20%       | Autre            | "Contenu choquant"      | Il y a 15min|
      | @user6     | 🥇 Or | 92%       | Haine & violence | "Passage 2:25-2:45"     | Il y a 10min|
    Et je vois que 5/6 ont choisi "Haine & violence"
    Et les utilisateurs de confiance sont mis en évidence
    Et je peux cliquer sur un commentaire pour sauter au timestamp

  Scénario: Consensus des signaleurs
    Étant donné que 6 signalements sont affichés
    Quand je consulte l'analyse de consensus
    Alors je vois:
      """
      📊 Consensus des signaleurs

      Catégorie majoritaire: 🚫 Haine & violence (5/6 = 83%)
      Signaleurs de confiance: 3/6 (Or × 2, Argent × 1)
      Timestamps mentionnés: 2:15, 2:25-2:45, 2:30

      → Fort consensus sur la catégorie et les timestamps
      """
    Et je peux prendre une décision plus facilement

  # Historique créateur - Vue 360°

  Scénario: Affichage de l'historique du créateur
    Étant donné que j'examine un signalement
    Quand j'affiche l'historique du créateur @pseudo
    Alors je vois sa vue 360°:
      | section                  | contenu                                    |
      | Statistiques globales    | 42 contenus, 12K écoutes, membre depuis 8 mois |
      | Strikes actuels          | 1/4 strikes (1 actif, 0 réhabilité)        |
      | Historique sanctions     | Liste des 3 dernières sanctions            |
      | Contenus récents         | 10 derniers contenus publiés               |
      | Score de confiance       | 65/100 (Créateur suspect)                  |
      | Signalements reçus       | 8 signalements dont 3 validés              |
    Et je vois si c'est un récidiviste ou un premier incident

  Scénario: Historique des strikes
    Étant donné que le créateur a 1 strike actif
    Quand je consulte les détails des strikes
    Alors je vois:
      """
      Strikes: 1/4 actifs

      Historique:
      ✓ Strike 1 - Il y a 3 mois
        Catégorie: Spam
        Sanction: Avertissement
        Statut: Actif (réhabilitation dans 3 mois si pas de récidive)

      Strikes réhabilités:
      [Aucun]

      Escalade suivante:
      - Strike 2: Suspension 7 jours
      - Strike 3: Suspension 30 jours
      - Strike 4: Ban définitif
      """
    Et je vois l'historique complet
    Et je peux décider de la sanction appropriée

  Scénario: Contenus récents du créateur
    Étant donné que j'affiche les contenus récents
    Quand je consulte la liste
    Alors je vois les 10 derniers contenus:
      | titre              | date       | écoutes | signalements | statut    |
      | Podcast #42        | 15/01/2026 | 342     | 6 (en cours) | Signalé   |
      | Podcast #41        | 10/01/2026 | 521     | 0            | Publié    |
      | Podcast #40        | 05/01/2026 | 678     | 1 (rejeté)   | Publié    |
      | Podcast #39        | 01/01/2026 | 445     | 0            | Publié    |
    Et je peux écouter rapidement un contenu précédent
    Et je peux détecter un pattern de comportement

  Scénario: Détection de pattern récidiviste
    Étant donné que le créateur a 3 contenus signalés validés en 2 mois
    Quand le système analyse le pattern
    Alors une alerte s'affiche:
      """
      ⚠️ Pattern récidiviste détecté

      3 signalements validés en 2 mois:
      - 15/01: Haine & violence (en cours)
      - 28/12: Spam (validé - Strike 1)
      - 10/12: Fausse info (validé)

      Recommandation: Sanction renforcée suggérée
      """
    Et je peux décider d'une sanction plus sévère
    Et je protège la communauté des récidivistes

  # Actions modérateur

  Scénario: Actions disponibles pour modérateur junior
    Étant donné que je suis modérateur junior
    Quand j'affiche les actions disponibles
    Alors je vois les boutons:
      | action              | raccourci | couleur | description                           |
      | Approuver           | A         | Rouge   | Valider le signalement + sanction     |
      | Rejeter             | R         | Gris    | Rejeter le signalement (non fondé)    |
      | Escalader senior    | S         | Orange  | Transférer à un modérateur senior     |
      | Commenter           | C         | Bleu    | Ajouter un commentaire interne        |
      | Mettre en attente   | W         | Jaune   | Reporter la décision (max 24h)        |
    Et je peux traiter les cas simples
    Et je peux escalader les cas complexes

  Scénario: Actions supplémentaires pour modérateur senior
    Étant donné que je suis modérateur senior
    Quand j'affiche les actions disponibles
    Alors je vois des actions supplémentaires:
      | action                     | description                              |
      | Approuver avec sanction    | Valider + choisir sanction personnalisée |
      | Ban temporaire             | Suspendre le créateur (7j/30j)           |
      | Ban définitif              | Bannir définitivement le créateur        |
      | Réhabiliter strike         | Retirer un strike (après appel)          |
      | Contacter autorités        | Signaler aux autorités (cas graves)      |
    Et je peux gérer les cas complexes et graves

  Scénario: Workflow approbation signalement
    Étant donné que je clique sur "Approuver" (A)
    Quand le workflow s'affiche
    Alors je vois les étapes:
      """
      1️⃣ Choisir la sanction

      Sanction suggérée (IA): Strike 2 + Suspension 7j
      [Radio buttons]
      ○ Strike 1 - Avertissement
      ● Strike 2 - Suspension 7 jours (recommandé)
      ○ Strike 3 - Suspension 30 jours
      ○ Autre (personnalisé)

      2️⃣ Confirmer l'action

      Actions qui seront effectuées:
      ✓ Contenu retiré de la plateforme
      ✓ Strike 2 ajouté au créateur
      ✓ Créateur suspendu 7 jours
      ✓ Notifications envoyées (push + email)
      ✓ Signaleurs notifiés (validation)

      [Annuler] [Confirmer et appliquer]
      """
    Et je peux personnaliser la sanction si nécessaire
    Et je confirme avant d'appliquer

  Scénario: Workflow rejet signalement
    Étant donné que je clique sur "Rejeter" (R)
    Quand le workflow s'affiche
    Alors je dois fournir une raison:
      """
      Rejeter ce signalement

      Raison du rejet: [Liste déroulante]
      ▼ Choisir une raison
      - Contenu conforme aux règles
      - Contexte éducatif/artistique
      - Signalement abusif
      - Autre (préciser)

      Commentaire (optionnel): [Champ texte]

      Actions qui seront effectuées:
      ✓ Signalement marqué comme "Rejeté"
      ✓ Contenu reste en ligne
      ✓ Signaleurs notifiés avec raison
      ✓ Fiabilité signaleur ajustée (-5%)

      [Annuler] [Confirmer le rejet]
      """
    Et la raison est obligatoire
    Et les signaleurs recevront une explication

  # Commentaires internes modérateurs

  Scénario: Ajouter un commentaire interne
    Étant donné que je travaille sur un cas complexe
    Quand je clique sur "Commenter" (C)
    Alors une zone de commentaire s'affiche:
      """
      Commentaire interne (visible uniquement par modérateurs)

      [Champ texte riche]

      Mentionner un collègue: @mod_

      [Annuler] [Publier le commentaire]
      """
    Et je peux mentionner un collègue avec @
    Et le commentaire apparaît dans le fil d'activité
    Et cela facilite la collaboration

  Scénario: Fil de commentaires sur un signalement
    Étant donné qu'un signalement a 3 commentaires internes
    Quand j'affiche le fil de commentaires
    Alors je vois:
      """
      💬 Commentaires internes (3)

      @mod_alice - Il y a 1h
      "Passage à 2:30 borderline. Besoin d'un second avis @mod_senior"

      @mod_senior - Il y a 30min
      "J'ai écouté. C'est clairement discriminatoire. Approuver avec Strike 2."

      @mod_alice - Il y a 5min
      "OK merci ! Je valide."
      """
    Et je vois l'historique des discussions
    Et cela améliore la qualité des décisions

  # Logs d'audit

  Scénario: Génération automatique des logs d'audit
    Étant donné que je valide un signalement
    Quand l'action est effectuée
    Alors un log d'audit complet est créé automatiquement:
      | champ                    | valeur                                    |
      | signalement_id           | #MOD-2026-00142                           |
      | content_id               | content_123456                            |
      | moderator_id             | mod_alice                                 |
      | moderator_role           | Junior                                    |
      | action_taken             | Approved - Strike 2 + Suspension 7d       |
      | ia_score                 | 97%                                       |
      | ia_category              | Haine & violence                          |
      | priority                 | CRITIQUE                                  |
      | processing_time          | 12 minutes 34 secondes                    |
      | timestamp                | 2026-01-15T14:42:18Z                      |
      | commentaires_internes    | 2 commentaires                            |
      | annotations_audio        | 3 annotations aux timestamps 2:15, 3:42, 8:20 |
    Et le log est conservé pour conformité DSA
    Et il sera anonymisé après 3 ans (RGPD)

  Scénario: Export des logs d'audit
    Étant donné que je suis admin modération
    Quand je veux exporter les logs
    Alors je peux exporter en:
      | format | contenu                           | usage                    |
      | CSV    | Tableau complet                   | Analyse Excel            |
      | JSON   | Données structurées               | Analyse programmatique   |
      | PDF    | Rapport formaté                   | Audit DSA officiel       |
    Et je peux filtrer par date, modérateur, action
    Et les logs sont conformes aux exigences légales

  # Performance et UX

  Scénario: Performance du player audio
    Étant donné que j'ouvre la page de détails
    Quand le player audio se charge
    Alors la waveform s'affiche en <2 secondes
    Et la transcription se charge en parallèle
    Et je peux commencer à écouter immédiatement
    Et le streaming HLS est fluide sans coupure
    Et l'UX est professionnelle et rapide

  Scénario: Raccourcis clavier pour actions rapides
    Étant donné que je suis sur la page de détails
    Quand j'utilise les raccourcis clavier
    Alors je peux:
      | touche       | action                              |
      | Espace       | Play/Pause audio                    |
      | ← / →        | Reculer/Avancer 5 secondes          |
      | ↑ / ↓        | Augmenter/Diminuer volume           |
      | A            | Approuver                           |
      | R            | Rejeter                             |
      | S            | Escalader                           |
      | C            | Commenter                           |
      | 1/2/3/4      | Vitesse 0.75x/1x/1.5x/2x            |
      | M            | Ajouter marqueur/annotation         |
      | Échap        | Retour au dashboard                 |
    Et je gagne en productivité

  # Coût infrastructure

  Scénario: Coût des outils modérateur
    Étant donné que tous les outils sont déployés
    Quand on évalue le coût
    Alors le coût est réparti ainsi:
      | composant              | technologie            | coût mensuel    |
      | Player Wavesurfer.js   | JavaScript (open source)| 0€              |
      | Transcription Whisper  | Self-hosted (CPU/GPU)  | 0-200€          |
      | Analyse NLP            | Self-hosted            | 0€ (inclus)     |
      | Stockage transcriptions| PostgreSQL             | 0€ (inclus)     |
      | Logs audit             | PostgreSQL             | 0€ (inclus)     |
      | Total                  | -                      | 0-200€/mois     |
    Et le coût est largement compensé par la productivité ×3-5
