/*
    Предрейсовые осмотры - мобильное приложение
    Оболочка приложения (status bar, общая разметка)
*/

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

const React = require('react'); //React
const { StatusBar, Platform } = require('react-native'); //Базовые компоненты
const { useAppNavigationContext } = require('./AppNavigationProvider'); //Контекст навигации
const { useAppAuthContext } = require('./AppAuthProvider'); //Контекст авторизации
const { useAppIdleContext } = require('./AppIdleProvider'); //Контекст простоя
const MainScreen = require('../../screens/MainScreen'); //Главный экран
const SettingsScreen = require('../../screens/SettingsScreen'); //Экран настроек
const AuthScreen = require('../../screens/AuthScreen'); //Экран авторизации
const AdaptiveView = require('../common/AdaptiveView'); //Адаптивный контейнер
const LoadingOverlay = require('../common/LoadingOverlay'); //Оверлей загрузки
const { STARTUP_CHECK_CONNECTION_MESSAGE, LOGOUT_IN_PROGRESS_MESSAGE } = require('../../config/messages'); //Сообщения
const styles = require('../../styles/layout/AppShell.styles'); //Стили оболочки

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

//Оболочка приложения
function AppShell({ isDarkMode }) {
    const { currentScreen, SCREENS } = useAppNavigationContext();
    const { isStartupSessionCheckInProgress, isLogoutInProgress } = useAppAuthContext();
    const { reportActivity } = useAppIdleContext();

    //Сброс таймера простоя при смене экрана (навигация считается активностью)
    React.useEffect(() => {
        reportActivity();
    }, [currentScreen, reportActivity]);

    const renderScreen = React.useCallback(() => {
        switch (currentScreen) {
            case SCREENS.MAIN:
                return <MainScreen />;
            case SCREENS.SETTINGS:
                return <SettingsScreen />;
            case SCREENS.AUTH:
                return <AuthScreen />;
            default:
                return <MainScreen />;
        }
    }, [currentScreen, SCREENS.MAIN, SCREENS.SETTINGS, SCREENS.AUTH]);

    //Определяем цвет status bar в зависимости от темы
    const statusBarStyle = isDarkMode ? 'light-content' : 'dark-content';
    const statusBarBackground = isDarkMode ? '#0F172A' : '#F8FAFC';

    const showStartupOverlay = currentScreen === SCREENS.MAIN && isStartupSessionCheckInProgress;
    const showLogoutOverlay = currentScreen === SCREENS.MAIN && isLogoutInProgress;

    return (
        <>
            <StatusBar barStyle={statusBarStyle} backgroundColor={statusBarBackground} translucent={Platform.OS === 'android'} />
            <AdaptiveView style={styles.container}>{renderScreen()}</AdaptiveView>
            <LoadingOverlay visible={showStartupOverlay} message={STARTUP_CHECK_CONNECTION_MESSAGE} />
            <LoadingOverlay visible={showLogoutOverlay} message={LOGOUT_IN_PROGRESS_MESSAGE} />
        </>
    );
}

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

module.exports = AppShell;
