"use client"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { UserMinus, Loader2, CheckCircle, AlertCircle, Trash2 } from "lucide-react"; interface DeleteUserResult { success: boolean; message: string; deletedUser?: { id: string; name: string; email: string; role: string; }; balanceDeleted?: boolean; error?: string; } interface FoundUser { _id: string; name: string; email: string; role: string; createdAt: string; } export default function DeleteUser() { const [searchData, setSearchData] = useState({ email: "", userId: "", }); const [isLoading, setIsLoading] = useState(false); const [result, setResult] = useState(null); const [confirmDelete, setConfirmDelete] = useState(false); const [foundUser, setFoundUser] = useState(null); const handleInputChange = (field: string, value: string) => { setSearchData((prev) => ({ ...prev, [field]: value })); // Réinitialiser les résultats quand l'utilisateur modifie le formulaire if (result) { setResult(null); } if (confirmDelete) { setConfirmDelete(false); } if (foundUser) { setFoundUser(null); } }; const validateForm = () => { if (!searchData.email.trim() && !searchData.userId.trim()) { return "Email ou ID utilisateur requis"; } if (searchData.email && searchData.userId) { return "Veuillez utiliser soit l'email soit l'ID, pas les deux"; } if (searchData.email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(searchData.email)) { return "Format d'email invalide"; } } return null; }; const handleSearch = async (e: React.FormEvent) => { e.preventDefault(); const validationError = validateForm(); if (validationError) { setResult({ success: false, message: validationError, }); return; } setIsLoading(true); setResult(null); setFoundUser(null); try { // D'abord, chercher l'utilisateur pour confirmation const searchParams = new URLSearchParams(); if (searchData.email) { searchParams.append("email", searchData.email.trim().toLowerCase()); } if (searchData.userId) { searchParams.append("id", searchData.userId.trim()); } const response = await fetch(`/api/collections/users?${searchParams.toString()}`); const data = await response.json(); if (response.ok && data.data && data.data.length > 0) { setFoundUser(data.data[0]); setResult({ success: true, message: "Utilisateur trouvé. Confirmez la suppression ci-dessous.", }); } else { setResult({ success: false, message: "Utilisateur non trouvé", }); } } catch (error) { console.error("Erreur lors de la recherche:", error); setResult({ success: false, message: "Erreur de connexion au serveur", }); } finally { setIsLoading(false); } }; const handleDelete = async () => { if (!foundUser) return; setIsLoading(true); setResult(null); try { const response = await fetch("/api/delete-user", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ userId: foundUser._id, }), }); const data = await response.json(); if (response.ok) { setResult({ success: true, message: data.message, deletedUser: data.deletedUser, balanceDeleted: data.balanceDeleted, }); // Réinitialiser le formulaire setSearchData({ email: "", userId: "", }); setFoundUser(null); setConfirmDelete(false); } else { setResult({ success: false, message: data.error || "Erreur lors de la suppression de l'utilisateur", }); } } catch (error) { console.error("Erreur lors de la suppression:", error); setResult({ success: false, message: "Erreur de connexion au serveur", }); } finally { setIsLoading(false); } }; return ( Supprimer un utilisateur
handleInputChange("email", e.target.value)} disabled={isLoading || !!searchData.userId} />
handleInputChange("userId", e.target.value)} disabled={isLoading || !!searchData.email} />
{!foundUser && (
)}
{foundUser && (

Utilisateur trouvé :

ID: {foundUser._id}

Nom: {foundUser.name}

Email: {foundUser.email}

Rôle: {foundUser.role}

Créé le: {new Date(foundUser.createdAt).toLocaleDateString()}

{!confirmDelete ? ( ) : (
)}
)} {result && ( {result.success ? ( ) : ( )} {result.message} {result.success && result.deletedUser && (
Utilisateur supprimé:
• Nom: {result.deletedUser.name}
• Email: {result.deletedUser.email}
• Rôle: {result.deletedUser.role}
• Solde supprimé: {result.balanceDeleted ? "Oui" : "Non"}
)}
)}

⚠️ Attention :

  • • Cette action est irréversible
  • • L'utilisateur et son solde seront définitivement supprimés
  • • Toutes les données associées seront perdues
  • • Utilisez cette fonction avec précaution
); }