import { useState, useRef, useEffect } from "react"; // Simulation time in milliseconds for pre-calculated documents const SIMULATION_DURATION = 8000; // 8 secondes au total const STEP_DURATION = SIMULATION_DURATION / 5; // Durée de chaque étape // Starting messages with their timing const STARTING_MESSAGES = [ { message: "Initializing evaluation environment", step: 1, totalSteps: 5 }, { message: "Finding available model providers", step: 2, totalSteps: 5 }, { message: "Starting evaluation process", step: 3, totalSteps: 5 }, { message: "Evaluating models", step: 4, totalSteps: 5 }, { message: "Storing evaluation results", step: 5, totalSteps: 5 }, ]; export const useSimulation = (onComplete, shouldStart = false) => { const [startingMessageIndex, setStartingMessageIndex] = useState(0); const [evaluationComplete, setEvaluationComplete] = useState(false); const timeoutsRef = useRef([]); const hasInitializedRef = useRef(false); // Effet pour démarrer la simulation si shouldStart est true useEffect(() => { if (!shouldStart || hasInitializedRef.current) return; // Marquer comme initialisé hasInitializedRef.current = true; console.log("Simulation starting with shouldStart =", shouldStart); // Programmer des timeouts séquentiels pour chaque étape for (let i = 1; i < STARTING_MESSAGES.length; i++) { const timeout = setTimeout(() => { console.log(`Setting message index to ${i}`); setStartingMessageIndex(i); }, i * STEP_DURATION); timeoutsRef.current.push(timeout); } // Programmer la fin de la simulation const completeTimeout = setTimeout(() => { console.log("Completing simulation"); setEvaluationComplete(true); if (onComplete) { onComplete(); } }, SIMULATION_DURATION); timeoutsRef.current.push(completeTimeout); return () => { // Nettoyer tous les timeouts lors du démontage timeoutsRef.current.forEach(clearTimeout); }; }, [shouldStart, onComplete]); return { startingMessageIndex, evaluationComplete, currentMessage: STARTING_MESSAGES[startingMessageIndex], }; };