/*
    Предрейсовые осмотры - мобильное приложение
    Корневой layout приложения
*/

//---------------------
//Подключение библиотек
//---------------------

const React = require('react'); //React и хуки
const { useColorScheme, View } = require('react-native'); //Определение темы устройства и разметка
const { SafeAreaProvider } = require('react-native-safe-area-context'); //Провайдер безопасной области
const AppShell = require('./AppShell'); //Оболочка приложения
const HardwareScannerProvider = require('./HardwareScannerProvider').HardwareScannerProvider; //Встроенный сканер
const styles = require('../../styles/layout/AppRoot.styles'); //Стили корневого layout
const { useAppNavigationContext } = require('./AppNavigationProvider'); //Контекст навигации
const { useAppAuthContext } = require('./AppAuthProvider'); //Контекст авторизации
const { useAppLocalDbContext } = require('./AppLocalDbProvider'); //Контекст локальной БД
const useStartupSessionCheck = require('../../hooks/useStartupSessionCheck'); //Проверка сессии при старте

//-----------
//Тело модуля
//-----------

//Корневой layout приложения
function AppRoot() {
    const colorScheme = useColorScheme();
    const isDarkMode = colorScheme === 'dark';

    const { setInitialScreen, SCREENS } = useAppNavigationContext();
    const { isAuthenticated, isInitialized } = useAppAuthContext();
    const { isDbReady } = useAppLocalDbContext();

    //Проверка сессии при старте и установка режима онлайн/оффлайн
    useStartupSessionCheck();

    //Флаг для предотвращения повторной установки начального экрана
    const initialScreenSetRef = React.useRef(false);

    //Установка начального экрана при готовности
    React.useEffect(() => {
        //Ждём инициализации БД и авторизации
        if (!isDbReady || !isInitialized || initialScreenSetRef.current) {
            return;
        }

        initialScreenSetRef.current = true;

        //Если авторизован - показываем главный экран
        if (isAuthenticated) {
            setInitialScreen(SCREENS.MAIN);
        }
    }, [isDbReady, isInitialized, isAuthenticated, setInitialScreen, SCREENS.MAIN]);

    return (
        <SafeAreaProvider>
            <View style={styles.container}>
                <HardwareScannerProvider>
                    <AppShell isDarkMode={isDarkMode} />
                </HardwareScannerProvider>
            </View>
        </SafeAreaProvider>
    );
}

//----------------
//Интерфейс модуля
//----------------

module.exports = AppRoot;
