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

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

const React = require('react'); //React и хуки
const usePreTripInspections = require('../../hooks/usePreTripInspections'); //Хук предметной области

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

//Контекст предрейсовых осмотров
const AppPreTripInspectionsContext = React.createContext(null);

//Провайдер предрейсовых осмотров
function AppPreTripInspectionsProvider({ children }) {
    const inspectionsApi = usePreTripInspections();

    //Мемоизация значения контекста с перечислением отдельных свойств
    const value = React.useMemo(
        () => ({
            inspections: inspectionsApi.inspections,
            loadStatus: inspectionsApi.loadStatus,
            error: inspectionsApi.error,
            isDbReady: inspectionsApi.isDbReady,
            refreshInspections: inspectionsApi.refreshInspections,
            upsertInspection: inspectionsApi.upsertInspection
        }),
        [
            inspectionsApi.inspections,
            inspectionsApi.loadStatus,
            inspectionsApi.error,
            inspectionsApi.isDbReady,
            inspectionsApi.refreshInspections,
            inspectionsApi.upsertInspection
        ]
    );

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

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

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

module.exports = {
    AppPreTripInspectionsProvider,
    useAppPreTripInspectionsContext
};
