import { useState, useEffect } from "react"; import { useToast } from "@/hooks/use-toast"; import { Team } from "@/clients/domains/admin-client"; interface User { uuid: string; firstName: string; lastName: string; teamName?: string; hasEvaluations: boolean; } interface UserFormData { firstName: string; lastName: string; teamId: string; } export function useUsersManagement(teams: Team[]) { const [users, setUsers] = useState([]); const [isLoading, setIsLoading] = useState(true); 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(); // Charger les utilisateurs depuis l'API const fetchUsers = async () => { setIsLoading(true); setError(null); try { const response = await fetch("/api/admin/users"); if (!response.ok) { throw new Error("Erreur lors de la récupération des utilisateurs"); } const usersData = await response.json(); setUsers(usersData); } catch (err: any) { setError(err.message || "Erreur lors du chargement des utilisateurs"); } finally { setIsLoading(false); } }; // Charger les utilisateurs au montage du composant useEffect(() => { fetchUsers(); }, []); 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); // TODO: Implémenter la création d'utilisateur toast({ title: "Succès", description: "Utilisateur créé avec succès", }); resetForm(); // Rafraîchir la liste await fetchUsers(); 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) => { if (user.teamName) { toast({ title: "Action impossible", description: "Retirez d'abord l'utilisateur de son équipe avant de le supprimer", variant: "destructive", }); return; } if ( !confirm( `Ê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.` ) ) { return; } setDeletingUserId(user.uuid); try { // TODO: Implémenter la suppression d'utilisateur // 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, fetchUsers, }; }