import { useEffect, useState } from "react"; import DashboardLayout from "@/components/DashboardLayout"; import { trpc } from "@/lib/trpc"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; import { Switch } from "@/components/ui/switch"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { AlertCircle, CheckCircle2, Mail, Send } from "lucide-react"; export default function AdminEmailConfig() { const { data: config, isLoading, refetch } = trpc.emailConfig.get.useQuery(); const upsertMutation = trpc.emailConfig.upsert.useMutation(); const testEmailMutation = trpc.emailConfig.testEmail.useMutation(); const [formData, setFormData] = useState({ provider: "resend", apiKey: "", fromEmail: "", fromName: "Formation Manager Itinova", mode: "simulation" as "simulation" | "production", domainVerified: false, }); const [testEmail, setTestEmail] = useState(""); // Charger la configuration existante useEffect(() => { if (config) { setFormData({ provider: config.provider, apiKey: config.apiKey || "", fromEmail: config.fromEmail, fromName: config.fromName, mode: config.mode, domainVerified: config.domainVerified, }); } }, [config]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); upsertMutation.mutate(formData, { onSuccess: () => { toast.success("Configuration enregistrée avec succès"); refetch(); }, onError: (error) => { toast.error(`Erreur: ${error.message}`); }, }); }; const handleTestEmail = () => { if (!testEmail) { toast.error("Veuillez saisir une adresse email"); return; } testEmailMutation.mutate( { toEmail: testEmail }, { onSuccess: (data) => { if (data.success) { toast.success(data.message || "Email de test envoyé avec succès"); } else { toast.error(data.message || "Échec de l'envoi de l'email de test"); } }, onError: (error) => { toast.error(`Erreur: ${error.message}`); }, } ); }; if (isLoading) { return (

Chargement...

); } return (

Configuration des emails

Configurez l'envoi d'emails via Resend et basculez entre mode simulation et production

{/* Statut actuel */} Statut actuel

Mode d'envoi

{formData.mode === "simulation" ? "Les emails sont simulés et envoyés comme notifications" : "Les emails sont envoyés via Resend"}

{formData.mode === "production" ? "Production" : "Simulation"}
{formData.apiKey && ( Clé API Resend configurée )} {!formData.apiKey && ( Aucune clé API configurée. Les emails seront simulés. )}
{/* Formulaire de configuration */} Configuration Resend Configurez votre compte Resend pour envoyer de vrais emails
setFormData({ ...formData, apiKey: e.target.value })} />

Obtenez votre clé API sur{" "} resend.com/api-keys

setFormData({ ...formData, fromEmail: e.target.value })} required />

L'adresse email doit être vérifiée dans votre compte Resend

setFormData({ ...formData, fromName: e.target.value })} required />

Activer l'envoi réel d'emails (désactiver pour simuler)

setFormData({ ...formData, mode: checked ? "production" : "simulation" }) } />
{/* Test d'envoi */} Test d'envoi Envoyez un email de test pour vérifier votre configuration
setTestEmail(e.target.value)} />
{formData.mode === "simulation" && ( Mode simulation actif. L'email de test sera simulé et envoyé comme notification au propriétaire. )}
{/* Documentation */} Guide de configuration

1. Créer un compte Resend

Inscrivez-vous gratuitement sur{" "} resend.com {" "} (100 emails/jour gratuits)

2. Vérifier votre domaine

Ajoutez et vérifiez votre domaine dans les paramètres Resend pour pouvoir envoyer des emails

3. Obtenir la clé API

Générez une clé API dans la section "API Keys" de votre compte Resend

4. Configurer et tester

Saisissez vos informations ci-dessus, enregistrez, puis testez l'envoi avant de passer en mode production

); }