import { useState, useEffect } from "react"; import { useToast } from "@/hooks/use-toast"; import { Team } from "@/lib/types"; import { adminClient } from "@/clients"; import { User, UserFormData } from "@/clients/domains/admin-client"; export function useUsersManagement(teams: Team[], initialUsers?: any[]) { const [users, setUsers] = useState(initialUsers || []); const [isLoading, setIsLoading] = useState(!initialUsers); const [error, setError] = useState(null); const [deletingUserId, setDeletingUserId] = useState(null); const [userFormData, setUserFormData] = useState({ firstName: "", lastName: "", teamId: "", }); const [isSubmitting, setIsSubmitting] = useState(false); const { toast } = useToast(); const resetForm = () => { setUserFormData({ firstName: "", lastName: "", teamId: "" }); }; const handleCreateUser = async () => { if (!userFormData.firstName || !userFormData.lastName) { toast({ title: "Erreur", description: "Veuillez remplir tous les champs obligatoires", variant: "destructive", }); return false; } try { setIsSubmitting(true); const newUser = await adminClient.createUser(userFormData); toast({ title: "Succès", description: "Utilisateur créé avec succès", }); // Ajouter le nouvel utilisateur à la liste locale setUsers([...users, newUser]); resetForm(); return true; } catch (error: any) { toast({ title: "Erreur", description: error.message || "Erreur lors de la création de l'utilisateur", variant: "destructive", }); return false; } finally { setIsSubmitting(false); } }; const handleDeleteUser = async (user: User) => { const confirmMessage = user.teamName ? `Êtes-vous sûr de vouloir supprimer définitivement ${user.firstName} ${user.lastName} ?\n\n⚠️ Cet utilisateur sera automatiquement retiré de l'équipe "${user.teamName}"\n\nCette action supprimera aussi toutes ses évaluations par skills et est irréversible.` : `Êtes-vous sûr de vouloir supprimer définitivement ${user.firstName} ${user.lastName} ?\n\nCette action supprimera aussi toutes ses évaluations par skills et est irréversible.`; if (!confirm(confirmMessage)) { return; } setDeletingUserId(user.uuid); try { await adminClient.deleteUser(user.uuid); // Mettre à jour la liste locale setUsers((prev) => prev.filter((u) => u.uuid !== user.uuid)); toast({ title: "Succès", description: `${user.firstName} ${user.lastName} a été supprimé avec succès`, }); } catch (err: any) { toast({ title: "Erreur", description: err.message || "Erreur lors de la suppression de l'utilisateur", variant: "destructive", }); } finally { setDeletingUserId(null); } }; return { users, isLoading, error, deletingUserId, userFormData, isSubmitting, setUserFormData, resetForm, handleCreateUser, handleDeleteUser, }; }