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

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

const React = require('react'); //React
const { View } = require('react-native'); //Базовые компоненты
const useIdleTimeout = require('../../hooks/useIdleTimeout'); //Хук простоя
const styles = require('../../styles/layout/AppIdleProvider.styles'); //Стили обёртки

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

//Контекст простоя (reportActivity для сброса таймера)
const AppIdleContext = React.createContext(null);

//Провайдер простоя: оборачивает приложение и при отсутствии активности выполняет выход
function AppIdleProvider({ children }) {
    const { reportActivity } = useIdleTimeout();

    const value = React.useMemo(
        () => ({
            reportActivity
        }),
        [reportActivity]
    );

    //Обёртка по touch сбрасывает таймер простоя
    const handleTouch = React.useCallback(() => {
        reportActivity();
    }, [reportActivity]);

    return (
        <AppIdleContext.Provider value={value}>
            <View style={styles.touchArea} onTouchStart={handleTouch} onTouchEnd={handleTouch} collapsable={false}>
                {children}
            </View>
        </AppIdleContext.Provider>
    );
}

//Хук контекста простоя
function useAppIdleContext() {
    const context = React.useContext(AppIdleContext);
    if (context == null) {
        throw new Error('useAppIdleContext должен использоваться внутри AppIdleProvider');
    }
    return context;
}

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

module.exports = {
    AppIdleProvider,
    useAppIdleContext
};
