import { useState, useEffect, useCallback, useRef } from "react"; import { ANIMATION_DURATIONS } from "~/utils/constants"; import { loadMessages, hasValidSession } from "~/utils/session-storage"; export const useScreenState = (isOpen: boolean) => { const [showWelcomeScreen, setShowWelcomeScreen] = useState(true); const [isFadingOut, setIsFadingOut] = useState(false); const [showSuggestionScreen, setShowSuggestionScreen] = useState(false); const hasShownWelcome = useRef(false); const hasUserSentFirstMessage = useRef(false); const hasCheckedExistingMessages = useRef(false); useEffect(() => { if (!hasCheckedExistingMessages.current) { const existingMessages = loadMessages(); const hasValidSessionData = hasValidSession(); if (hasValidSessionData && existingMessages.length > 0) { hasShownWelcome.current = true; hasUserSentFirstMessage.current = true; setShowWelcomeScreen(false); setShowSuggestionScreen(false); } hasCheckedExistingMessages.current = true; } }, []); useEffect(() => { if (isOpen && !hasShownWelcome.current) { setShowWelcomeScreen(true); setIsFadingOut(false); setShowSuggestionScreen(false); hasShownWelcome.current = true; } else if ( isOpen && hasShownWelcome.current && !hasUserSentFirstMessage.current ) { setShowWelcomeScreen(false); setShowSuggestionScreen(true); } else if ( isOpen && hasShownWelcome.current && hasUserSentFirstMessage.current ) { setShowWelcomeScreen(false); setShowSuggestionScreen(false); } }, [isOpen]); useEffect(() => { if (isOpen && showWelcomeScreen && !hasUserSentFirstMessage.current) { const timer = setTimeout(() => { setIsFadingOut(true); setTimeout(() => { setShowWelcomeScreen(false); setShowSuggestionScreen(true); }, ANIMATION_DURATIONS.FAST); }, ANIMATION_DURATIONS.VERY_SLOW); return () => clearTimeout(timer); } }, [isOpen, showWelcomeScreen]); const goToChat = useCallback(() => { hasShownWelcome.current = true; hasUserSentFirstMessage.current = true; setShowWelcomeScreen(false); setShowSuggestionScreen(false); }, []); const resetToWelcomeScreen = useCallback(() => { hasShownWelcome.current = false; hasUserSentFirstMessage.current = false; setShowWelcomeScreen(true); setIsFadingOut(false); setShowSuggestionScreen(false); }, []); return { showWelcomeScreen, isFadingOut, showSuggestionScreen, goToChat, resetToWelcomeScreen }; };