import { useCallback, useState } from 'react'; export function useSessionProtection() { const [activeSessions, setActiveSessions] = useState>(new Set()); const [processingSessions, setProcessingSessions] = useState>(new Set()); const markSessionAsActive = useCallback((sessionId?: string | null) => { if (!sessionId) { return; } setActiveSessions((prev) => new Set([...prev, sessionId])); }, []); const markSessionAsInactive = useCallback((sessionId?: string | null) => { if (!sessionId) { return; } setActiveSessions((prev) => { const next = new Set(prev); next.delete(sessionId); return next; }); }, []); const markSessionAsProcessing = useCallback((sessionId?: string | null) => { if (!sessionId) { return; } setProcessingSessions((prev) => new Set([...prev, sessionId])); }, []); const markSessionAsNotProcessing = useCallback((sessionId?: string | null) => { if (!sessionId) { return; } setProcessingSessions((prev) => { const next = new Set(prev); next.delete(sessionId); return next; }); }, []); const replaceTemporarySession = useCallback((realSessionId?: string | null) => { if (!realSessionId) { return; } setActiveSessions((prev) => { const next = new Set(); for (const sessionId of prev) { if (!sessionId.startsWith('new-session-')) { next.add(sessionId); } } next.add(realSessionId); return next; }); }, []); return { activeSessions, processingSessions, markSessionAsActive, markSessionAsInactive, markSessionAsProcessing, markSessionAsNotProcessing, replaceTemporarySession, }; }