import { useState, useEffect } from "react"; import { useToast } from "@/hooks/use-toast"; import { SkillCategory } from "@/lib/types"; import { adminClient } from "@/clients"; import { Skill } from "@/clients/domains/admin-client"; interface SkillFormData { name: string; categoryId: string; description: string; icon: string; } export function useSkillsManagement(skillCategories: SkillCategory[]) { const [skills, setSkills] = useState([]); const [isLoading, setIsLoading] = useState(true); const [editingSkill, setEditingSkill] = useState(null); const [skillFormData, setSkillFormData] = useState({ name: "", categoryId: "", description: "", icon: "", }); const [isSubmitting, setIsSubmitting] = useState(false); const { toast } = useToast(); // Charger les skills depuis l'API const fetchSkills = async () => { try { setIsLoading(true); const skillsData = await adminClient.getSkills(); setSkills(skillsData); } catch (error) { console.error("Error fetching skills:", error); toast({ title: "Erreur", description: "Impossible de charger les skills", variant: "destructive", }); } finally { setIsLoading(false); } }; // Charger les skills au montage du composant useEffect(() => { fetchSkills(); }, []); const resetForm = () => { setSkillFormData({ name: "", categoryId: "", description: "", icon: "" }); setEditingSkill(null); }; const handleCreateSkill = async () => { console.log("skillFormData", skillFormData); if (!skillFormData.name || !skillFormData.categoryId) { toast({ title: "Erreur", description: "Veuillez remplir tous les champs obligatoires", variant: "destructive", }); return false; } try { setIsSubmitting(true); const categoryIndex = parseInt(skillFormData.categoryId); const category = skillCategories[categoryIndex]; const skillData = { ...skillFormData, category: category.category, categoryId: category.id, }; const newSkill = await adminClient.createSkill(skillData); setSkills([...skills, newSkill]); resetForm(); toast({ title: "Succès", description: "Skill créée avec succès", }); return true; } catch (error: any) { toast({ title: "Erreur", description: error.message || "Erreur lors de la création de la skill", variant: "destructive", }); return false; } finally { setIsSubmitting(false); } }; const handleEditSkill = (skill: Skill) => { setEditingSkill(skill); const categoryIndex = skillCategories.findIndex( (cat) => cat.category === skill.category ); setSkillFormData({ name: skill.name, categoryId: categoryIndex !== -1 ? categoryIndex.toString() : "", description: skill.description, icon: skill.icon, }); }; const handleUpdateSkill = async () => { if (!editingSkill || !skillFormData.name || !skillFormData.categoryId) { toast({ title: "Erreur", description: "Veuillez remplir tous les champs obligatoires", variant: "destructive", }); return false; } try { setIsSubmitting(true); const categoryIndex = parseInt(skillFormData.categoryId); const category = skillCategories[categoryIndex]; const skillData = { id: editingSkill.id, ...skillFormData, category: category.category, usageCount: editingSkill.usageCount, }; const updatedSkill = await adminClient.updateSkill(skillData); const updatedSkills = skills.map((skill) => skill.id === editingSkill.id ? updatedSkill : skill ); setSkills(updatedSkills); resetForm(); toast({ title: "Succès", description: "Skill mise à jour avec succès", }); return true; } catch (error: any) { toast({ title: "Erreur", description: error.message || "Erreur lors de la mise à jour de la skill", variant: "destructive", }); return false; } finally { setIsSubmitting(false); } }; const handleDeleteSkill = async (skillId: string) => { if ( !confirm( "Êtes-vous sûr de vouloir supprimer cette skill ? Cette action est irréversible." ) ) { return; } try { await adminClient.deleteSkill(skillId); setSkills(skills.filter((s) => s.id !== skillId)); toast({ title: "Succès", description: "Skill supprimée avec succès", }); } catch (error: any) { toast({ title: "Erreur", description: error.message || "Erreur lors de la suppression de la skill", variant: "destructive", }); } }; return { skills, isLoading, editingSkill, skillFormData, isSubmitting, setSkillFormData, resetForm, handleCreateSkill, handleEditSkill, handleUpdateSkill, handleDeleteSkill, }; }