# Configuration du Code Promo OFFRETEST

## Description

Le code promo **OFFRETEST** permet aux nouveaux utilisateurs de tester les formules **Pro** (33€/mois) et **Pro Plus** (88€/mois) avec des fonctionnalités limitées :

- **Crédits limités** : 100 crédits au lieu de 500 (Pro) ou 1500 (Pro Plus)
- **Durée d'essai** : 31 jours
- **Prix** : Gratuit pendant la période d'essai (100% de réduction sur le premier mois)
- **Après 31 jours** : Facturation automatique au prix normal avec les crédits normaux

## Configuration requise dans Stripe

### 1. Créer le Coupon dans Stripe

Dans le dashboard Stripe (https://dashboard.stripe.com/coupons), créez un coupon avec les paramètres suivants :

- **Nom** : Offre Test 31 jours
- **Type** : Pourcentage
- **Réduction** : 100%
- **Durée** : Une fois (applies only to first invoice)
- **ID du coupon** : `OFFRETEST_COUPON` (ou laisser Stripe générer un ID)

### 2. Créer le Code Promo

Dans le dashboard Stripe (https://dashboard.stripe.com/promotion_codes), créez un code promo lié à ce coupon :

- **Code** : `OFFRETEST` (exactement ce texte, en majuscules - **TRÈS IMPORTANT**)
- **Coupon** : Sélectionnez le coupon créé à l'étape 1
- **Limite d'utilisations** : Illimitée ou selon vos besoins
- **Actif** : Oui
- **Première commande uniquement** : Recommandé

### 3. Restrictions (optionnel mais recommandé)

Vous pouvez limiter le code promo aux produits spécifiques :

- Limiter aux produits correspondant aux plans Pro et Pro Plus
- Première commande uniquement
- Limiter à un usage par client

## Fonctionnement technique

### Comment le code promo est détecté

Le système détecte le code promo de deux façons :

1. **Via URL** : Si l'utilisateur arrive avec `?promo=OFFRETEST` dans l'URL
2. **Via Stripe Checkout** : L'utilisateur saisit `OFFRETEST` dans le champ "Code promo" du checkout Stripe

Dans le second cas (le plus courant), le webhook `checkout.session.completed` récupère les informations de discount depuis l'abonnement Stripe et vérifie si c'est le code OFFRETEST.

### Flux utilisateur

1. L'utilisateur choisit le plan Pro (33€) ou Pro Plus (88€)
2. Sur la page de paiement Stripe, il entre le code `OFFRETEST`
3. Le checkout s'effectue avec 100% de réduction sur le premier mois
4. Le webhook Stripe détecte le code promo utilisé
5. L'abonnement est créé avec :
   - `is_promo_trial = 1`
   - `promo_code_used = 'OFFRETEST'`
   - `promo_trial_ends_at = NOW() + 14 jours`
   - `promo_credits_limit = 100`
6. L'utilisateur reçoit 100 crédits au lieu des crédits normaux

### Après 14 jours

Le cron `convert_promo_trial_subscriptions.php` s'exécute quotidiennement et :

1. Détecte les abonnements dont `promo_trial_ends_at` est passé
2. Attribue les crédits normaux selon le plan (500 pour Pro, 1500 pour Pro Plus)
3. Marque l'abonnement comme converti (`promo_trial_converted = 1`)
4. L'utilisateur est facturé au prix normal par Stripe (automatiquement le mois suivant)

## Configuration du Cron

Ajoutez le cron suivant (exécution quotidienne à 3h) :

```bash
0 3 * * * php /chemin/vers/cron/convert_promo_trial_subscriptions.php >> /chemin/vers/logs/cron.log 2>&1
```

## Tables de base de données

### Nouvelles colonnes sur `subscriptions`

- `is_promo_trial` : TINYINT(1) - Indique si c'est un abonnement promo
- `promo_code_used` : VARCHAR(50) - Le code promo utilisé
- `promo_trial_ends_at` : DATETIME - Date de fin de la période d'essai
- `promo_trial_converted` : TINYINT(1) - Si la conversion a été effectuée
- `promo_credits_limit` : INT - Limite de crédits pendant l'essai

### Nouvelle table `promo_trial_conversions`

Historique des conversions pour suivi et statistiques.

## Logs

Les logs sont disponibles dans :

- `logs/subscription.log` : Création des abonnements promo
- `logs/credits.log` : Attribution des crédits limités
- `logs/cron_promo_trial_conversions.log` : Conversions quotidiennes

## Extension future

Pour ajouter d'autres codes promo d'essai, modifiez les constantes dans `subscription_helper.php` :

```php
define('PROMO_TRIAL_CODE', 'OFFRETEST');
define('PROMO_TRIAL_CREDITS_LIMIT', 100);
define('PROMO_TRIAL_DAYS', 31);
define('PROMO_TRIAL_ELIGIBLE_PLANS', ['pro', 'pro_plus']);
```
