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

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

const React = require('react'); //React и хуки
const useLocalDb = require('../../hooks/useLocalDb'); //Хук локальной БД

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

//Контекст локальной БД
const AppLocalDbContext = React.createContext(null);

//Провайдер локальной БД
function AppLocalDbProvider({ children }) {
    const api = useLocalDb();

    //Мемоизация значения контекста с перечислением отдельных свойств
    const value = React.useMemo(
        () => ({
            isDbReady: api.isDbReady,
            inspections: api.inspections,
            error: api.error,
            loadInspections: api.loadInspections,
            saveInspection: api.saveInspection,
            getSetting: api.getSetting,
            setSetting: api.setSetting,
            deleteSetting: api.deleteSetting,
            getAllSettings: api.getAllSettings,
            clearSettings: api.clearSettings,
            clearInspections: api.clearInspections,
            vacuum: api.vacuum,
            checkTableExists: api.checkTableExists,
            setAuthSession: api.setAuthSession,
            getAuthSession: api.getAuthSession,
            clearAuthSession: api.clearAuthSession
        }),
        [
            api.isDbReady,
            api.inspections,
            api.error,
            api.loadInspections,
            api.saveInspection,
            api.getSetting,
            api.setSetting,
            api.deleteSetting,
            api.getAllSettings,
            api.clearSettings,
            api.clearInspections,
            api.vacuum,
            api.checkTableExists,
            api.setAuthSession,
            api.getAuthSession,
            api.clearAuthSession
        ]
    );

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

//Хук доступа к контексту локальной БД
function useAppLocalDbContext() {
    const ctx = React.useContext(AppLocalDbContext);
    if (!ctx) {
        throw new Error('useAppLocalDbContext должен использоваться внутри AppLocalDbProvider');
    }
    return ctx;
}

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

module.exports = {
    AppLocalDbProvider,
    useAppLocalDbContext
};
