"use client"; import { useCallback } from "react"; import { createDefaultCVData, type CVCareerData, type CVTabId, type Experience, } from "@/lib/types/cv"; import { localStorageAdapter } from "@/lib/storage"; import { useLocalStorage } from "@/lib/hooks/useLocalStorage"; export interface UseCVDataReturn { data: CVCareerData; setText: (tab: CVTabId, value: string) => void; addExperience: (titre: string, contenu: string) => void; updateExperience: (id: string, titre: string, contenu: string) => void; removeExperience: (id: string) => void; resetCV: () => void; importCV: (value: CVCareerData) => void; } const DEFAULT_TITLE = "Expérience"; export function useCVData(): UseCVDataReturn { const [data, setData] = useLocalStorage( localStorageAdapter, createDefaultCVData(), ); const setText = useCallback( (tab: CVTabId, value: string) => { setData((prev) => ({ ...prev, [tab]: value })); }, [setData], ); const addExperience = useCallback( (titre: string, contenu: string) => { setData((prev) => { const now = Date.now(); const experience: Experience = { id: crypto.randomUUID(), titre: titre.trim() || DEFAULT_TITLE, contenu, createdAt: now, updatedAt: now, }; return { ...prev, experiences: [...prev.experiences, experience] }; }); }, [setData], ); const updateExperience = useCallback( (id: string, titre: string, contenu: string) => { setData((prev) => ({ ...prev, experiences: prev.experiences.map((exp) => exp.id === id ? { ...exp, titre: titre.trim() || DEFAULT_TITLE, contenu, updatedAt: Date.now(), } : exp, ), })); }, [setData], ); const removeExperience = useCallback( (id: string) => { setData((prev) => ({ ...prev, experiences: prev.experiences.filter((exp) => exp.id !== id), })); }, [setData], ); const resetCV = useCallback(() => { setData(createDefaultCVData()); }, [setData]); const importCV = useCallback((value: CVCareerData) => { setData(value); }, [setData]); return { data, setText, addExperience, updateExperience, removeExperience, resetCV, importCV, }; }