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

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

const React = require('react'); //React и хуки
const useAppMode = require('../../hooks/useAppMode'); //Хук режима работы

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

//Контекст режима работы приложения
const AppModeContext = React.createContext(null);

//Провайдер режима работы приложения
function AppModeProvider({ children }) {
    const modeApi = useAppMode();

    //Мемоизация значения контекста с перечислением отдельных свойств
    const value = React.useMemo(
        () => ({
            APP_MODE: modeApi.APP_MODE,
            mode: modeApi.mode,
            setMode: modeApi.setMode,
            setOnline: modeApi.setOnline,
            setOffline: modeApi.setOffline,
            setNotConnected: modeApi.setNotConnected,
            isOnline: modeApi.isOnline,
            isOffline: modeApi.isOffline,
            isNotConnected: modeApi.isNotConnected
        }),
        [
            modeApi.APP_MODE,
            modeApi.mode,
            modeApi.setMode,
            modeApi.setOnline,
            modeApi.setOffline,
            modeApi.setNotConnected,
            modeApi.isOnline,
            modeApi.isOffline,
            modeApi.isNotConnected
        ]
    );

    return <AppModeContext.Provider value={value}>{children}</AppModeContext.Provider>;
}

//Хук доступа к контексту режима работы приложения
function useAppModeContext() {
    const ctx = React.useContext(AppModeContext);
    if (!ctx) {
        throw new Error('useAppModeContext должен использоваться внутри AppModeProvider');
    }
    return ctx;
}

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

module.exports = {
    AppModeProvider,
    useAppModeContext
};
