# language: fr

Fonctionnalité: Profil créateur
  En tant qu'utilisateur de RoadWave
  Je veux consulter les profils des créateurs
  Afin de découvrir leur contenu et décider de m'abonner

  Contexte:
    Étant donné que l'application RoadWave est démarrée

  # 15.2.1 - Structure de la page profil

  Scénario: URL du profil créateur
    Étant donné un créateur avec le pseudo "paris_stories"
    Quand l'utilisateur accède au profil
    Alors l'URL est "https://roadwave.fr/@paris_stories"

  Scénario: Informations principales du profil
    Étant donné un créateur "@paris_stories" avec les informations suivantes:
      | champ           | valeur                              |
      | photo           | avatar_120x120.jpg                  |
      | pseudo          | paris_stories                       |
      | badge_vérifié   | true                                |
      | bio             | Histoires et anecdotes de Paris     |
      | abonnés         | 1200                                |
      | contenus        | 42                                  |
      | durée_totale    | 18h                                 |
      | écoutes_totales | 54000                               |
    Quand le profil est affiché
    Alors les éléments suivants sont visibles:
      | élément                    | valeur affichée      |
      | Photo profil               | 120×120 px           |
      | @pseudo                    | @paris_stories       |
      | Badge vérifié              | ✓                    |
      | Bio                        | Histoires et...      |
      | Nombre abonnés             | 1.2K abonnés         |
      | Nombre contenus            | 42 contenus          |
      | Durée totale               | 18h de contenu créé  |
      | Écoutes totales            | 54K écoutes totales  |

  Plan du Scénario: Arrondi des statistiques publiques
    Étant donné un créateur avec <valeur_exacte> <métrique>
    Quand le profil est affiché
    Alors la valeur affichée est "<valeur_affichée>"

    Exemples:
      | métrique        | valeur_exacte | valeur_affichée |
      | abonnés         | 342           | 342             |
      | abonnés         | 1200          | 1.2K            |
      | abonnés         | 54000         | 54K             |
      | abonnés         | 1200000       | 1.2M            |
      | écoutes         | 842           | 842             |
      | écoutes         | 5400          | 5.4K            |
      | écoutes         | 142000        | 142K            |
      | écoutes         | 2100000       | 2.1M            |
      | durée (heures)  | 18            | 18h             |
      | durée (heures)  | 142           | 142h            |

  Scénario: Bio avec markdown basique
    Étant donné un créateur avec la bio suivante en markdown:
      """
      **Histoires de Paris** - Découvrez la capitale
      *Nouveau contenu chaque semaine*
      https://paris-stories.fr
      """
    Quand le profil est affiché
    Alors le texte en gras "Histoires de Paris" est formaté
    Et le texte en italique "Nouveau contenu chaque semaine" est formaté
    Et le lien "https://paris-stories.fr" est cliquable

  Scénario: Limitation de la bio à 300 caractères
    Étant donné un créateur qui entre une bio de 350 caractères
    Quand la bio est sauvegardée
    Alors seuls les 300 premiers caractères sont conservés
    Et un message "Maximum 300 caractères" s'affiche

  Scénario: Boutons d'action principaux
    Étant donné que l'utilisateur consulte un profil créateur
    Quand la page est chargée
    Alors les boutons suivants sont visibles:
      | bouton             | action                        |
      | S'abonner          | Abonnement au créateur        |
      | Partager profil    | Menu de partage               |
      | •••                | Menu contextuel               |

  Scénario: Menu contextuel du profil [•••]
    Étant donné que l'utilisateur clique sur le bouton [•••]
    Quand le menu s'ouvre
    Alors les options suivantes sont disponibles:
      | option            | description                              |
      | Partager profil   | Partager le lien du profil               |
      | Signaler profil   | Signaler spam ou usurpation d'identité   |
      | Bloquer créateur  | Masquer tous les contenus du créateur    |

  Scénario: Liste des contenus du créateur
    Étant donné un créateur avec 3 contenus publiés
    Quand le profil est affiché
    Alors chaque contenu affiche:
      | élément            | exemple                        |
      | Cover image        | Image 16:9                     |
      | Titre              | Balade à Paris                 |
      | Durée et écoutes   | 12 min · 🎧 2.3K              |
      | Localisation       | 📍 Paris                      |
      | Bouton lecture     | ▶️                            |

  Plan du Scénario: Options de tri des contenus
    Étant donné un créateur avec 10 contenus publiés
    Quand l'utilisateur sélectionne le tri "<option_tri>"
    Alors les contenus sont triés par <critère>

    Exemples:
      | option_tri      | critère                                              |
      | Plus récents    | Date publication DESC (défaut)                       |
      | Plus populaires | Écoutes × facteur temporel (90 jours)                |
      | Plus anciens    | Date publication ASC                                 |

  Scénario: Filtrage des contenus par tag
    Étant donné un créateur avec des contenus taggés "Voyage", "Histoire", "Gastronomie"
    Quand l'utilisateur filtre par tags "Voyage, Histoire"
    Alors seuls les contenus avec ces tags sont affichés
    Et le nombre de résultats est indiqué "12 contenus"

  Scénario: Recherche locale dans le profil
    Étant donné que l'utilisateur consulte le profil de "@paris_stories"
    Et que le créateur a publié 50 contenus
    Quand l'utilisateur entre "Montmartre" dans la barre de recherche
    Alors la recherche s'effectue sur les titres et descriptions
    Et seuls les contenus correspondants sont affichés
    Et le placeholder indique "Rechercher dans les contenus de @paris_stories"

  Scénario: Chargement paginé des contenus
    Étant donné un créateur avec 100 contenus publiés
    Quand le profil est affiché
    Alors 20 contenus sont chargés initialement
    Et un bouton "Charger plus" est visible en bas de page
    Quand l'utilisateur clique sur "Charger plus"
    Alors 20 contenus supplémentaires sont chargés

  # 15.2.2 - Statistiques publiques

  Scénario: Informations publiques visibles par tous
    Étant donné que l'utilisateur consulte un profil créateur
    Alors les informations suivantes sont publiques:
      | information           | visible |
      | Photo et pseudo       | ✅      |
      | Badge vérifié         | ✅      |
      | Bio                   | ✅      |
      | Nombre abonnés        | ✅      |
      | Nombre contenus       | ✅      |
      | Durée totale créée    | ✅      |
      | Écoutes totales       | ✅      |

  Scénario: Informations privées non visibles
    Étant donné que l'utilisateur consulte un profil créateur
    Alors les informations suivantes sont privées:
      | information           | visible |
      | Liste des abonnés     | ❌      |
      | Revenus               | ❌      |
      | Localisation précise  | ❌      |
      | Email                 | ❌      |

  Scénario: Dashboard créateur avec métriques privées
    Étant donné que le créateur "@paris_stories" consulte son propre dashboard
    Quand la page statistiques est affichée
    Alors les métriques suivantes sont accessibles:
      | métrique                    | type          |
      | Taux complétion moyen       | 78%           |
      | Évolution abonnés           | Graphique     |
      | Écoutes par contenu         | Tableau       |
      | Revenus                     | Dashboard     |
      | Taux conversion Premium     | Pourcentage   |
      | Démographie (âge/zone)      | Agrégée       |

  Scénario: Graphique d'évolution des abonnés
    Étant donné que le créateur consulte son dashboard
    Quand il sélectionne la période "30 jours"
    Alors un graphique d'évolution des abonnés est affiché
    Et les périodes disponibles sont:
      | période |
      | 30j     |
      | 90j     |
      | 1 an    |

  Scénario: Tableau détaillé des écoutes par contenu
    Étant donné un créateur avec 10 contenus publiés
    Quand il consulte le tableau des performances
    Alors chaque contenu affiche:
      | métrique                | exemple    |
      | Titre                   | Balade     |
      | Écoutes totales         | 2300       |
      | Écoutes complètes >80%  | 1840       |
      | Taux complétion         | 80%        |
      | Likes                   | 420        |
      | Partages                | 56         |

  # 15.2.3 - Badge vérifié

  Scénario: Affichage du badge vérifié
    Étant donné un créateur vérifié "@paris_stories"
    Quand son profil est affiché
    Alors le badge bleu "✓" est accolé au pseudo
    Et un tooltip "Compte vérifié" s'affiche au survol

  Scénario: Badge vérifié visible partout
    Étant donné un créateur vérifié "@paris_stories"
    Alors le badge "✓" est affiché dans:
      | emplacement           |
      | Page profil           |
      | Player en lecture     |
      | Résultats de recherche|
      | Notifications         |

  Plan du Scénario: Attribution automatique du badge selon critères
    Étant donné un créateur avec <critère>
    Quand les conditions sont validées
    Alors le badge vérifié est attribué <automatique>

    Exemples:
      | critère                              | automatique |
      | KYC Mangopay validé                  | Oui         |
      | ≥10K abonnés + compte >6 mois        | Oui         |
      | Célébrité / Média officiel           | Manuel      |

  Scénario: Attribution automatique via KYC
    Étant donné un créateur qui complète son KYC Mangopay
    Quand les documents sont validés
    Alors le badge vérifié est attribué automatiquement
    Et une notification "Votre compte est maintenant vérifié ✓" est envoyée

  Scénario: Attribution automatique à 10K abonnés
    Étant donné un créateur avec 9999 abonnés et un compte de 7 mois
    Quand il atteint 10000 abonnés
    Alors le badge vérifié est attribué automatiquement
    Et une notification de félicitations est envoyée

  Scénario: Demande manuelle de vérification (célébrité)
    Étant donné un créateur reconnu publiquement
    Quand il soumet le formulaire de demande de vérification
    Alors une requête est créée pour l'équipe RoadWave
    Et l'équipe vérifie l'identité sous 48-72h
    Et le badge est attribué si validation réussie

  Scénario: Retrait du badge en cas de suspension
    Étant donné un créateur vérifié avec le badge "✓"
    Quand sa monétisation est suspendue
    Alors le badge vérifié est retiré temporairement
    Et le badge est restauré après levée de la suspension

  Scénario: Retrait définitif du badge pour strikes multiples
    Étant donné un créateur vérifié avec 3 strikes actifs
    Quand un 4ème strike est appliqué (ban)
    Alors le badge vérifié est retiré définitivement
    Et le compte est banni

  Scénario: Retrait du badge pour usurpation d'identité
    Étant donné un créateur vérifié qui usurpe l'identité d'une célébrité
    Quand la fraude est détectée
    Alors le badge est retiré immédiatement
    Et le compte est banni
    Et une enquête est ouverte

  # Cas d'erreur et limites

  Scénario: Profil créateur supprimé
    Étant donné qu'un utilisateur tente d'accéder à "@deleted_user"
    Quand la page est chargée
    Alors un message "Ce profil n'existe pas ou a été supprimé" s'affiche

  Scénario: Blocage d'un créateur
    Étant donné que l'utilisateur bloque le créateur "@spam_account"
    Quand l'utilisateur consulte son flux de recommandations
    Alors aucun contenu de "@spam_account" n'est affiché
    Et le créateur n'apparaît plus dans les recherches

  Scénario: Déblocage d'un créateur
    Étant donné que l'utilisateur a bloqué "@paris_stories"
    Quand il accède à ses paramètres "Comptes bloqués"
    Et qu'il débloque "@paris_stories"
    Alors les contenus du créateur réapparaissent dans les recommandations

  Scénario: Signalement d'un profil pour spam
    Étant donné que l'utilisateur signale le profil "@spam_account"
    Quand il sélectionne la raison "Spam"
    Alors le signalement est envoyé à la modération
    Et un message de confirmation s'affiche
    Et le profil reste visible jusqu'à décision de modération

  Scénario: Signalement pour usurpation d'identité
    Étant donné que l'utilisateur signale le profil "@fake_celebrity"
    Quand il sélectionne "Usurpation d'identité"
    Et qu'il fournit une preuve
    Alors le signalement est priorisé (priorité HAUTE)
    Et l'équipe modération traite sous 24h
