# Système d'Email Universel

## Vue d'ensemble

Le système d'email universel permet de gérer tous les emails de l'application avec un template unique qui s'adapte automatiquement selon le type de notification.

## Architecture

### Fichiers principaux

- `lib/emailTemplateService.ts` - Service principal du système universel
- `lib/emailMigrationHelpers.ts` - Utilitaires de migration
- `lib/emailService.ts` - Service existant mis à jour pour les contrats
- `templates-mails/` - Templates individuels existants (legacy)

## Types d'emails supportés

Le système supporte 14 types d'emails différents, chacun avec sa propre couleur et configuration :

| Type | Couleur | Usage |
|------|---------|-------|
| `contract-created` | Vert | Création de nouveaux contrats |
| `contract-updated` | Bleu | Modification de contrats |
| `contract-cancelled` | Rouge | Annulation de contrats |
| `invitation` | Violet | Invitation d'utilisateurs |
| `invoice` | Orange | Envoi de factures |
| `signature-request` | Indigo | Demande de signature électronique |
| `signature-reminder` | Ambre | Rappel de signature |
| `password-reset` | Cyan | Réinitialisation de mot de passe |
| `otp` | Lime | Codes de vérification |
| `access-granted` | Émeraude | Accès accordés |
| `access-revoked` | Rose | Accès révoqués |
| `account-activation` | Jaune | Invitation/activation de compte |
| `access-updated` | Orange | Modification d’habilitation (rôle) |
| `notification` | Gris | Notifications générales |
| `reminder` | Jaune | Rappels |
| `welcome` | Teal | Messages de bienvenue |

## Utilisation

### Envoi d'un email

```typescript
import { sendUniversalEmail } from '../lib/emailTemplateService';

// Email de nouveau contrat
await sendUniversalEmail({
  to: 'artiste@example.com',
  type: 'contract-created',
  data: {
    nomSalarie: 'Jean Dupont',
    nomProducteur: 'Théâtre National',
    nomSpectacle: 'Le Mariage de Figaro',
    dateDebut: '15 janvier 2025',
    dateFin: '30 mars 2025',
    cachet: '450€',
    signatureLink: 'https://example.com/sign/abc123'
  }
});

// Email d'invitation
await sendUniversalEmail({
  to: 'nouveau@example.com',
  type: 'invitation',
  data: {
    invitedUserName: 'Marie Martin',
    inviterName: 'Admin Système',
    organizationName: 'Compagnie Théâtrale',
    activationLink: 'https://example.com/activate/def456'
  }
});
```

### Fonctions de migration

Pour faciliter la transition, des fonctions spécialisées sont disponibles :

```typescript
import { 
  sendInvitationEmail,
  sendInvoiceEmail,
  sendSignatureRequestEmail,
  sendPasswordResetEmail,
  sendOTPEmail 
} from '../lib/emailMigrationHelpers';

// Utilisation simplifiée
await sendInvitationEmail({
  to: 'user@example.com',
  invitedUserName: 'Jean Dupont',
  inviterName: 'Admin',
  organizationName: 'Ma Compagnie',
  activationLink: 'https://...'
});
```

### Exemples accès / habilitations

```typescript
import { 
  sendAccountActivationEmail,
  sendAccessUpdatedEmail,
  sendAccessRevokedEmail
} from '../lib/emailMigrationHelpers';

// Activation de compte
await sendAccountActivationEmail('user@example.com', {
  firstName: 'Marie',
  organizationName: 'Compagnie Théâtrale',
  activationUrl: 'https://paie.odentas.fr/activate?token=abc'
});

// Modification d’habilitation
await sendAccessUpdatedEmail('user@example.com', {
  firstName: 'Jean',
  organizationName: 'Odentas',
  oldRole: 'AGENT',
  newRole: 'ADMIN',
  updatedBy: 'admin@odentas.fr',
  updateDate: new Date().toLocaleString('fr-FR')
});

// Révocation d’accès
await sendAccessRevokedEmail('user@example.com', {
  firstName: 'Lucie',
  organizationName: 'Odentas',
  reason: 'Accès obsolète',
  revokedBy: 'admin@odentas.fr',
  revocationDate: new Date().toLocaleString('fr-FR')
});
```

## Avantages du système universel

### 1. Cohérence visuelle
- Un seul template garantit une apparence uniforme
- Design responsive automatique
- Couleurs cohérentes selon le type d'email

### 2. Maintenance simplifiée
- Un seul fichier à maintenir au lieu de 13+ templates
- Modifications centralisées
- Configuration type par type

### 3. Flexibilité
- Ajout facile de nouveaux types d'emails
- Variables dynamiques par type
- Système d'actions configurables

### 4. Compatibilité
- Fonctionne avec AWS SES
- HTML compatible avec tous les clients email
- Fallback texte automatique

## Migration depuis l'ancien système

### Étapes recommandées

1. **Phase 1** ✅ - Système de contrats migré
   - `sendContractNotifications`
   - `sendContractUpdateNotifications`
   - `sendContractCancellationNotifications`

2. **Phase 2** - Autres types d'emails
   - Remplacer les appels directs aux templates individuels
   - Utiliser les fonctions de migration disponibles

3. **Phase 3** - Nettoyage (optionnel)
   - Supprimer les anciens templates après validation complète
   - Simplifier les imports

### Remplacement des appels existants

```typescript
// AVANT (ancien système)
await ses.sendEmail({
  Destination: { ToAddresses: [email] },
  Message: {
    Subject: { Data: subject },
    Body: { Html: { Data: htmlTemplate } }
  },
  Source: fromEmail
});

// APRÈS (système universel)
await sendUniversalEmail({
  to: email,
  type: 'contract-created',
  data: contractData
});
```

## Configuration des types d'emails

Chaque type d'email peut être configuré dans `emailTemplateService.ts` :

```typescript
'contract-created': {
  subject: 'Nouveau contrat CDDU créé',
  colors: {
    primary: '#059669',    // Vert
    primaryDark: '#047857',
    primaryLight: '#d1fae5'
  },
  title: 'Nouveau contrat',
  // ... autres configurations
}
```

## Tests et validation

Le système a été testé avec :
- ✅ Build Next.js réussi
- ✅ Types TypeScript validés
- ✅ Configuration AWS SES compatible
- ✅ Templates HTML responsive

## Support technique

Pour toute question ou problème avec le système d'email universel :
1. Vérifier la configuration du type d'email
2. Valider les données fournies
3. Contrôler les logs AWS SES
4. Tester avec un email de développement

---

*Système créé pour unifier et simplifier la gestion des emails dans l'application de paie spectacle.*