import { useEffect } from 'react'; import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native'; import { Stack, router, useSegments } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import * as SplashScreen from 'expo-splash-screen'; import 'react-native-reanimated'; import { useColorScheme } from '@/hooks/use-color-scheme'; import { AuthProvider, useAuth } from '@/contexts/AuthContext'; import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; // Prevent auto-hiding splash screen SplashScreen.preventAutoHideAsync(); function RootLayoutNav() { const colorScheme = useColorScheme(); const { isAuthenticated, isLoading } = useAuth(); const segments = useSegments(); useEffect(() => { if (isLoading) return; // Hide splash screen once we know auth state SplashScreen.hideAsync(); const inAuthGroup = segments[0] === '(auth)'; if (!isAuthenticated && !inAuthGroup) { // Redirect to login if not authenticated router.replace('/(auth)/login'); } else if (isAuthenticated && inAuthGroup) { // Redirect to main app if authenticated router.replace('/(tabs)'); } }, [isAuthenticated, isLoading, segments]); if (isLoading) { return ; } return ( ); } export default function RootLayout() { return ( ); }