# language: fr
Fonctionnalité: Création de campagnes publicitaires
  En tant que publicitaire
  Je veux créer des campagnes avec ciblage précis et maîtrise du budget
  Afin d'optimiser mes investissements publicitaires

  Contexte:
    Étant donné que l'API RoadWave est disponible
    Et qu'un compte publicitaire est créé et vérifié

  Scénario: Création d'une campagne publicitaire complète
    Étant donné que je suis connecté en tant que publicitaire
    Quand je crée une nouvelle campagne avec les paramètres:
      | Paramètre             | Valeur                    |
      | Budget total          | 300€                      |
      | Date début            | 2026-02-01                |
      | Date fin              | 2026-02-14                |
      | Zone géographique     | Département du Var        |
      | Plages horaires       | 7h-9h, 17h-19h            |
      | Tags ciblés           | Automobile, Voyage        |
      | Tranche d'âge         | 18+                       |
    Alors la campagne est créée avec succès
    Et le budget quotidien calculé est de 21.43€/jour
    Et les diffusions estimées sont de ~430 écoutes complètes
    Et un statut "En attente de validation" est assigné

  Scénario: Budget minimum 50€ requis
    Étant donné que je crée une nouvelle campagne
    Quand je définis un budget de 40€
    Alors une erreur s'affiche: "Budget minimum requis: 50€"
    Et la campagne n'est pas créée

  Scénario: Budget de 50€ exactement accepté
    Étant donné que je crée une nouvelle campagne
    Quand je définis un budget de 50€
    Alors la campagne est créée avec succès
    Et aucune erreur n'est affichée

  Scénario: Calcul automatique du budget quotidien
    Étant donné une campagne avec:
      | Budget total | 300€  |
      | Durée        | 14 j  |
    Quand le système calcule le budget quotidien
    Alors le budget/jour est de 21.43€
    Et le nombre estimé de diffusions/jour est de 430 (à 0.05€/écoute)

  Scénario: Ciblage géographique point GPS précis
    Étant donné que je crée une campagne
    Quand je sélectionne "Point GPS" avec coordonnées (43.1234, 5.9234)
    Et que je définis un rayon de 5km
    Alors la campagne cible uniquement les utilisateurs dans ce rayon
    Et la zone est représentée par un cercle sur la carte

  Scénario: Ciblage géographique ville
    Étant donné que je crée une campagne
    Quand je sélectionne "Ville" et choisis "Marseille"
    Alors la campagne cible tous les utilisateurs dans la commune de Marseille
    Et les limites administratives sont affichées sur la carte

  Scénario: Ciblage géographique département
    Étant donné que je crée une campagne
    Quand je sélectionne "Département" et choisis "Var (83)"
    Alors la campagne cible tout le département du Var
    Et une estimation de population cible est affichée

  Scénario: Ciblage géographique région
    Étant donné que je crée une campagne
    Quand je sélectionne "Région" et choisis "Provence-Alpes-Côte d'Azur"
    Alors la campagne cible toute la région PACA
    Et l'estimation de population cible est mise à jour

  Scénario: Ciblage géographique national
    Étant donné que je crée une campagne
    Quand je sélectionne "National"
    Alors la campagne cible tous les utilisateurs en France
    Et aucune limite géographique n'est appliquée

  Scénario: Ciblage horaire plages multiples
    Étant donné que je crée une campagne
    Quand je définis les plages horaires:
      | Plage      |
      | 7h-9h      |
      | 12h-14h    |
      | 17h-19h    |
    Alors la publicité est diffusée uniquement pendant ces plages
    Et elle n'est jamais diffusée en dehors (ex: 10h, 15h, 20h)

  Scénario: Ciblage horaire toute la journée
    Étant donné que je crée une campagne
    Quand je ne définis aucune plage horaire spécifique
    Alors la publicité est diffusée 24h/24
    Et aucune restriction horaire n'est appliquée

  Scénario: Ciblage par centres d'intérêt
    Étant donné que je crée une campagne pour un garage automobile
    Quand je sélectionne les tags:
      | Tag          |
      | Automobile   |
      | Mécanique    |
      | Sport        |
    Alors la publicité est prioritaire pour les utilisateurs avec jauges élevées sur ces tags
    Et elle peut quand même être diffusée à d'autres utilisateurs (ciblage non exclusif)

  Scénario: Classification d'âge obligatoire
    Étant donné que je crée une campagne
    Quand j'essaie de valider sans sélectionner une tranche d'âge
    Alors une erreur s'affiche: "Classification d'âge obligatoire"
    Et les options proposées sont:
      | Option       |
      | Tout public  |
      | 13+          |
      | 16+          |
      | 18+          |

  Scénario: Upload audio publicitaire formats acceptés
    Étant donné que je crée une campagne
    Quand j'upload un fichier audio format MP3
    Alors le fichier est accepté
    Quand j'upload un fichier audio format AAC (.aac ou .m4a)
    Alors le fichier est accepté
    Quand j'upload un fichier audio format WAV
    Alors une erreur s'affiche: "Format non supporté. Utilisez MP3 ou AAC"

  Scénario: Durée audio publicitaire validée
    Étant donné que je crée une campagne
    Quand j'upload un audio de 8 secondes
    Alors une erreur s'affiche: "Durée minimale: 10 secondes"
    Quand j'upload un audio de 65 secondes
    Alors une erreur s'affiche: "Durée maximale: 60 secondes"
    Quand j'upload un audio de 30 secondes
    Alors le fichier est accepté

  Scénario: Prépaiement obligatoire via Mangopay
    Étant donné que j'ai configuré une campagne à 300€
    Quand j'arrive à l'étape de paiement
    Alors je dois payer les 300€ avant validation
    Et le paiement est traité via Mangopay
    Et seule la carte bancaire est acceptée

  Scénario: Recharge automatique optionnelle
    Étant donné que j'ai une campagne active
    Quand je configure la recharge automatique à 10% du budget
    Alors si le budget restant passe sous 30€ (10% de 300€)
    Et que la campagne recharge automatiquement 100€
    Et ma carte bancaire est débitée de 100€
    Et le budget total passe à 130€

  Scénario: Désactivation recharge automatique
    Étant donné que j'ai activé la recharge automatique
    Quand je désactive cette option
    Alors aucune recharge ne se produit automatiquement
    Et la campagne s'arrête quand le budget atteint 0€

  Scénario: Étalement budget sur période longue
    Étant donné une campagne avec:
      | Budget total | 1000€ |
      | Durée        | 30 j  |
    Quand le système calcule l'étalement
    Alors le budget/jour est de 33.33€
    Et si le budget se consomme plus vite (ex: 50€/jour)
    Alors une alerte "Budget épuisé dans 10 jours" est envoyée

  Scénario: Estimation population cible selon zone
    Étant donné que je sélectionne la zone "Marseille"
    Quand le système calcule la population cible
    Alors l'estimation affichée est "~15 000 utilisateurs potentiels"
    Et un message "Estimation basée sur utilisateurs actifs dans la zone" s'affiche

  Scénario: Campagne avec date de début différée
    Étant donné que je crée une campagne
    Quand je définis la date de début au 2026-03-01 (dans 1 mois)
    Alors la campagne a le statut "Programmée"
    Et elle démarre automatiquement le 2026-03-01 à 00h00
    Et le budget n'est pas consommé avant cette date

  Scénario: Interface self-service accessible
    Étant donné que je suis un publicitaire
    Quand j'accède à l'interface publicitaire
    Alors je peux créer une campagne sans contact commercial RoadWave
    Et toutes les options sont configurables en autonomie
    Et un tutoriel guidé est disponible (première utilisation)

  Scénario: Aperçu zone ciblée sur carte interactive
    Étant donné que je configure une zone géographique
    Quand je sélectionne "Département du Var"
    Alors une carte Leaflet affiche les limites du département en surbrillance
    Et un compteur "~50 000 utilisateurs actifs" est affiché
    Et je peux zoomer/dézoomer pour visualiser la zone

  Scénario: Tags multiples pour ciblage affiné
    Étant donné que je crée une campagne pour un restaurant
    Quand je sélectionne les tags:
      | Tag           |
      | Gastronomie   |
      | Tourisme      |
      | Famille       |
    Alors la publicité est prioritaire pour utilisateurs intéressés par ces 3 thèmes
    Et le score de ciblage combine les 3 jauges d'intérêt

  Scénario: Validation des dates de campagne
    Étant donné que je crée une campagne
    Quand je définis une date de début postérieure à la date de fin
    Alors une erreur s'affiche: "Date de fin doit être après date de début"
    Et la campagne n'est pas créée

  Scénario: Durée minimale de campagne
    Étant donné que je crée une campagne
    Quand je définis une durée de moins de 24 heures
    Alors une erreur s'affiche: "Durée minimale: 1 jour"
    Et je dois ajuster les dates

  Scénario: Durée maximale de campagne
    Étant donné que je crée une campagne
    Quand je définis une durée de plus de 90 jours
    Alors une erreur s'affiche: "Durée maximale: 90 jours"
    Et je dois ajuster les dates ou créer plusieurs campagnes

  Plan du Scénario: Calcul budget quotidien selon durée
    Étant donné une campagne avec un budget de <budget>€
    Quand la durée est de <duree> jours
    Alors le budget quotidien est de <budget_jour>€/jour

    Exemples:
      | budget | duree | budget_jour |
      | 100    | 10    | 10.00       |
      | 300    | 14    | 21.43       |
      | 500    | 30    | 16.67       |
      | 1000   | 60    | 16.67       |

  Plan du Scénario: Estimation diffusions selon budget
    Étant donné un budget quotidien de <budget_jour>€
    Quand le coût par écoute complète est 0.05€
    Alors le nombre estimé de diffusions/jour est <diffusions>

    Exemples:
      | budget_jour | diffusions |
      | 10.00       | 200        |
      | 21.43       | 429        |
      | 50.00       | 1000       |
      | 100.00      | 2000       |

  Plan du Scénario: Formats audio acceptés/rejetés
    Étant donné que j'upload un fichier <fichier>
    Quand le format est <format>
    Alors le résultat est <resultat>

    Exemples:
      | fichier         | format | resultat |
      | pub.mp3         | MP3    | accepté  |
      | pub.aac         | AAC    | accepté  |
      | pub.m4a         | AAC    | accepté  |
      | pub.wav         | WAV    | rejeté   |
      | pub.ogg         | OGG    | rejeté   |
      | pub.flac        | FLAC   | rejeté   |
