# language: fr

@ui @moderation @sanctions @appel
Fonctionnalité: Interface sanctions et processus d'appel (Mobile)
  En tant que créateur de contenu
  Je veux consulter mes sanctions et faire appel si nécessaire
  Afin de comprendre les décisions et contester si je pense qu'il y a erreur

  # 14.3 - Interface sanctions et appel

  Contexte:
    Étant donné que je suis un créateur de contenu
    Et que je suis connecté à l'application mobile

  # Notifications multi-canal

  Scénario: Notification push immédiate après sanction
    Étant donné que mon contenu vient d'être modéré
    Quand la sanction est appliquée
    Alors je reçois une notification push immédiate:
      """
      ⚠️ Votre contenu a été modéré
      Appuyez pour voir les détails
      """
    Et la notification est marquée comme importante (son + vibration)
    Et je peux cliquer pour accéder aux détails
    Et la notification reste visible jusqu'à ce que je la lise

  Scénario: Popup in-app au prochain lancement
    Étant donné que mon contenu a été modéré
    Et que je n'ai pas encore consulté la sanction
    Quand j'ouvre l'application
    Alors une popup modale s'affiche automatiquement avant tout:
      """
      ⚠️ Attention

      Votre contenu "Mon podcast #42" a été modéré.

      Catégorie violée: 🚫 Haine & violence
      Sanction: Strike 2/4 - Suspension 7 jours

      [Voir les détails] [Plus tard]
      """
    Et la popup est prioritaire (affichée avant le contenu de l'app)
    Et je ne peux pas la fermer sans l'avoir lue (pas de bouton X)
    Et je dois cliquer sur un bouton pour continuer

  Scénario: Design de la popup de sanction
    Étant donné que la popup de sanction s'affiche
    Quand je vérifie le design
    Alors le fond est rouge clair (#FFEBEE) pour signaler la gravité
    Et l'icône ⚠️ est proéminente
    Et le texte est clair et concis
    Et les boutons sont bien visibles:
      | bouton          | style              | couleur |
      | Voir les détails| Primaire (plein)   | Rouge   |
      | Plus tard       | Secondaire (border)| Gris    |
    Et le design est professionnel et sérieux

  # Page détaillée de la sanction

  Scénario: Affichage de la page détails sanction
    Étant donné que je clique sur "Voir les détails"
    Quand la page s'affiche
    Alors je vois toutes les informations obligatoires:
      | section                    | contenu exemple                             |
      | En-tête avec icône         | ⚠️ Contenu modéré                           |
      | Titre du contenu           | "Mon podcast #42"                           |
      | Date de publication        | "Publié le 15/01/2026"                      |
      | Catégorie violée           | 🚫 Haine & violence (Article 3.2 CGU)      |
      | Raison détaillée           | "Propos discriminatoires envers un groupe"  |
      | Passage problématique      | "3:42-4:15" (avec player audio)             |
      | Transcription surlignée    | "[texte problématique en rouge]"            |
      | Gravité de la sanction     | Strike 2/4 - Suspension 7 jours             |
      | Conséquences futures       | "Strike 3: 30j / Strike 4: Ban définitif"   |
      | Délai d'appel              | "7 jours pour faire appel"                  |
      | Bouton Contester           | [Contester cette décision]                  |
      | Lien CGU                   | [Voir les règles de la communauté]          |
    Et toutes les sections sont clairement séparées

  Scénario: Player audio du passage problématique
    Étant donné que je consulte les détails de la sanction
    Quand je vois la section "Passage problématique"
    Alors un player audio s'affiche avec le timestamp "3:42-4:15"
    Et je peux écouter uniquement cette portion de l'audio
    Et les contrôles sont simples: Play/Pause + volume
    Et la waveform visualise le passage
    Et je peux comprendre exactement ce qui pose problème

  Scénario: Transcription avec mise en évidence
    Étant donné que je consulte la transcription du passage
    Quand j'affiche la transcription
    Alors les mots/phrases problématiques sont surlignés en rouge
    Et le contexte autour est affiché en gris
    Et je peux voir exactement quels mots ont posé problème:
      """
      [contexte gris]... et c'est pourquoi je pense que
      [ROUGE: phrase discriminatoire problématique]
      [contexte gris]... mais c'est mon opinion.
      """
    Et la mise en évidence est claire

  Scénario: Lien vers l'article des CGU
    Étant donné que la sanction référence "Article 3.2 CGU"
    Quand je clique sur le lien
    Alors je suis redirigé vers les CGU
    Et la section "Article 3.2 - Haine & violence" est mise en évidence
    Et je peux lire exactement ce qui est interdit
    Et je comprends mieux ma violation

  # Escalade des sanctions

  Scénario: Affichage de l'escalade des strikes
    Étant donné que j'ai reçu le Strike 2
    Quand je consulte la section "Gravité"
    Alors je vois clairement l'escalade:
      """
      Vous avez reçu le Strike 2/4

      Historique:
      ✓ Strike 1: Avertissement (il y a 3 mois)
      ⚠️ Strike 2: Suspension 7 jours (aujourd'hui)

      Prochaines étapes si récidive:
      ⚠️ Strike 3: Suspension 30 jours
      ❌ Strike 4: Ban définitif

      Réhabilitation:
      -1 strike tous les 6 mois sans incident
      """
    Et je comprends la progression des sanctions
    Et je suis motivé à ne pas récidiver

  Scénario: Compteur de suspension visible
    Étant donné que je suis suspendu pour 7 jours
    Quand j'ouvre l'application
    Alors une bannière persistante s'affiche en haut:
      """
      ⏸️ Compte suspendu - 5 jours restants
      """
    Et la bannière est visible sur toutes les pages
    Et je vois le décompte en temps réel
    Et je ne peux pas publier de nouveau contenu

  # Accès à l'historique des sanctions

  Scénario: Consulter l'historique des sanctions
    Étant donné que je suis dans mon profil créateur
    Quand je clique sur "Mes sanctions"
    Alors je vois la liste de toutes mes sanctions passées:
      | colonne              | contenu exemple                  |
      | Date                 | 15/01/2026                       |
      | Contenu              | "Mon podcast #42"                |
      | Catégorie            | 🚫 Haine & violence              |
      | Sanction             | Strike 2 - Suspension 7j         |
      | Statut               | Active / Terminée / Annulée      |
      | Appel                | Aucun / En cours / Accepté / Rejeté |
      | Action               | [Faire appel] / [Détails]        |
    Et les sanctions sont triées par date décroissante

  Scénario: Sanctions actives vs terminées
    Étant donné que j'ai 3 sanctions dans mon historique
    Quand j'affiche "Mes sanctions"
    Alors les sanctions actives sont mises en évidence (fond rouge clair)
    Et les sanctions terminées sont en gris
    Et les sanctions annulées (après appel) sont en vert clair
    Et je vois clairement l'état de chaque sanction

  # Formulaire d'appel

  Scénario: Accéder au formulaire d'appel depuis la notification
    Étant donné que je consulte les détails d'une sanction
    Et que le délai d'appel n'est pas dépassé (<7 jours)
    Quand je clique sur "Contester cette décision"
    Alors le formulaire d'appel s'affiche en plein écran
    Et le formulaire est pré-rempli avec les informations de la sanction
    Et je peux commencer à rédiger mon appel

  Scénario: Structure du formulaire d'appel
    Étant donné que le formulaire d'appel est affiché
    Quand je vérifie les champs
    Alors je vois la structure suivante:
      | champ                  | type                    | limite          | obligatoire |
      | Sanction contestée     | Texte (readonly)        | -               | oui         |
      | Raison de l'appel      | Texte court             | 50-1000 car.    | oui         |
      | Arguments détaillés    | Zone texte enrichie     | 1000-5000 car.  | oui         |
      | Preuves                | Upload fichiers         | 5 max, 10MB tot.| non         |
      | Bouton Annuler         | Secondaire              | -               | -           |
      | Bouton Soumettre       | Primaire                | -               | -           |
    Et tous les champs obligatoires sont marqués d'un astérisque rouge

  Scénario: Validation du formulaire d'appel
    Étant donné que je remplis le formulaire d'appel
    Quand je clique sur "Soumettre l'appel"
    Alors le système valide:
      | règle                                  | message d'erreur si non respecté              |
      | Raison >50 caractères                  | "La raison doit faire au moins 50 caractères" |
      | Arguments >100 caractères              | "Développez vos arguments (min 100 car.)"     |
      | Total fichiers <10 MB                  | "Taille totale des fichiers >10 MB"           |
      | Formats fichiers acceptés (PDF, JPG)   | "Format de fichier non accepté"               |
    Et si une erreur existe, le champ est surligné en rouge
    Et je dois corriger avant de pouvoir soumettre

  Scénario: Upload de preuves
    Étant donné que je veux joindre des preuves
    Quand je clique sur "Ajouter des preuves"
    Alors je peux choisir depuis:
      | source                  | types acceptés        |
      | Galerie photos          | JPG, PNG              |
      | Fichiers                | PDF                   |
      | Caméra (nouveau)        | JPG                   |
    Et je peux uploader jusqu'à 5 fichiers
    Et la taille totale ne peut pas dépasser 10 MB
    Et une progress bar s'affiche pendant l'upload

  Scénario: Confirmation après soumission de l'appel
    Étant donné que j'ai soumis un appel valide
    Quand l'appel est enregistré
    Alors une page de confirmation s'affiche:
      """
      ✓ Appel envoyé avec succès

      Numéro de ticket: #MOD-2026-00142

      Votre appel sera examiné par un modérateur senior
      sous 72h maximum (3 jours ouvrés).

      Vous serez notifié de la décision par:
      - Notification push
      - Email
      - Notification in-app

      [Retour à mes sanctions]
      """
    Et je reçois un email de confirmation identique
    Et le statut dans "Mes sanctions" passe à "Appel en cours 🔍"

  # Délai d'appel et compteur

  Scénario: Compteur de jours restants pour faire appel
    Étant donné que j'ai reçu une sanction il y a 3 jours
    Quand je consulte les détails de la sanction
    Alors je vois un compteur en haut de page:
      """
      ⏰ 4 jours restants pour faire appel
      """
    Et le compteur est en orange pour attirer l'attention
    Et il se met à jour en temps réel (chaque jour)

  Scénario: Délai d'appel dépassé
    Étant donné que j'ai reçu une sanction il y a 8 jours
    Quand je consulte les détails de la sanction
    Alors le bouton "Contester cette décision" est désactivé (grisé)
    Et un message s'affiche:
      """
      ⚠️ Le délai de 7 jours pour faire appel est dépassé.
      Cette décision est désormais définitive.
      """
    Et je ne peux plus contester la sanction

  # Suivi de l'appel

  Scénario: Statut de l'appel dans l'historique
    Étant donné que j'ai soumis un appel
    Quand je consulte "Mes sanctions"
    Alors je vois le statut de l'appel:
      | statut appel           | badge                      | couleur |
      | Aucun appel            | -                          | -       |
      | Appel en cours         | En cours 🔍                | Orange  |
      | Appel accepté          | Accepté ✓                  | Vert    |
      | Appel rejeté           | Rejeté ✗                   | Rouge   |
      | Sanction réduite       | Partiellement accepté 🟡   | Bleu    |
    Et un badge de notification m'alerte si le statut change

  Scénario: Notification quand l'appel est traité - Accepté
    Étant donné que mon appel a été accepté
    Quand le modérateur prend la décision
    Alors je reçois une notification push + in-app:
      """
      ✓ Appel accepté

      Votre sanction a été annulée.
      Le strike a été retiré et votre contenu a été rétabli.

      [Voir les détails]
      """
    Et je reçois un email détaillé avec la justification
    Et le statut dans mes sanctions passe à "Annulée"

  Scénario: Notification quand l'appel est traité - Rejeté
    Étant donné que mon appel a été rejeté
    Quand le modérateur prend la décision
    Alors je reçois une notification:
      """
      Appel rejeté

      Votre appel a été examiné et la sanction est maintenue.
      Cette décision est définitive.

      [Voir la justification]
      """
    Et je reçois un email avec la justification détaillée
    Et le statut reste "Active"
    Et je ne peux pas faire de second appel

  Scénario: Notification intermédiaire si délai >72h
    Étant donné que mon appel complexe est en cours depuis 3 jours
    Quand le délai de 72h est dépassé
    Alors je reçois une notification intermédiaire:
      """
      Appel #MOD-2026-00142 en cours

      Votre appel nécessite un examen approfondi.
      Réponse sous 2 jours maximum.

      Merci de votre patience.
      """
    Et je suis rassuré que mon appel n'est pas oublié

  # Page détails de la réponse à l'appel

  Scénario: Détails de la réponse - Appel accepté
    Étant donné que mon appel a été accepté
    Quand je consulte les détails de la réponse
    Alors je vois:
      """
      Décision: Annulation de la sanction ✓

      Justification:
      Après examen de votre appel, nous reconnaissons que le
      passage mentionné était dans un contexte éducatif et ne
      constitue pas une violation des règles de la communauté.

      Actions prises:
      ✓ Strike retiré de votre compte
      ✓ Suspension annulée
      ✓ Contenu rétabli sur la plateforme

      Cette décision est définitive.
      """
    Et je suis satisfait de la transparence

  Scénario: Détails de la réponse - Sanction réduite
    Étant donné que mon appel a été partiellement accepté
    Quand je consulte les détails
    Alors je vois:
      """
      Décision: Réduction de la sanction 🟡

      Justification:
      Nous reconnaissons des circonstances atténuantes.

      Sanction initiale: Strike 2 - Suspension 7 jours
      Sanction réduite: Strike 1 - Suspension 3 jours

      Cette décision est définitive.
      """
    Et je vois le compteur de suspension mis à jour (3 jours au lieu de 7)

  # Dark mode et accessibilité

  Scénario: Support du dark mode
    Étant donné que j'ai activé le dark mode
    Quand j'affiche la page de sanction
    Alors les couleurs s'adaptent:
      | élément                | couleur light    | couleur dark      |
      | Fond page              | Blanc            | Noir (#121212)    |
      | Carte sanction         | Rouge clair      | Rouge foncé       |
      | Texte principal        | Noir             | Blanc             |
      | Passage problématique  | Rouge            | Rouge (#FF6B6B)   |
      | Bouton Contester       | Rouge (#DC3545)  | Rouge (#F85149)   |
    Et le contraste reste suffisant

  Scénario: Accessibilité lecteur d'écran
    Étant donné que j'utilise un lecteur d'écran
    Quand je navigue dans la page de sanction
    Alors chaque section est clairement annoncée:
      """
      Contenu modéré. Attention.
      Votre contenu "Mon podcast numéro 42" a été modéré.
      Catégorie violée: Haine et violence, Article 3 point 2.
      Raison: Propos discriminatoires envers un groupe.
      Passage problématique: 3 minutes 42 secondes à 4 minutes 15 secondes.
      Sanction: Strike 2 sur 4. Suspension 7 jours.
      Bouton: Contester cette décision.
      """
    Et tous les éléments sont accessibles au clavier

  # Coût et conformité

  Scénario: Coût de la fonctionnalité
    Étant donné que l'interface sanctions et appel est en place
    Quand on évalue le coût
    Alors le développement est 100% interne (Flutter)
    Et aucun service tiers n'est utilisé
    Et le coût opérationnel est de 0€
    Et les emails de notification coûtent ~0.001€/email

  Scénario: Conformité DSA - Transparence
    Étant donné que le système de sanction est en place
    Quand on vérifie la conformité DSA
    Alors chaque sanction contient:
      | élément DSA requis                   | présent |
      | Référence précise à la règle violée  | ✓       |
      | Explication claire                   | ✓       |
      | Preuve (extrait + transcription)     | ✓       |
      | Possibilité de recours               | ✓       |
      | Délai de recours clairement indiqué  | ✓       |
      | Réponse motivée au recours           | ✓       |
    Et le système est conforme au Digital Services Act
