/*
    Парус 8 - Панели мониторинга - ТОиР - Аналитика по ремонтам АТС
    Пользовательские хуки: Хуки фильтров
*/

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

import { useState, useContext, useCallback, useEffect } from "react"; //Классы React
import { BackEndСtx } from "../../../context/backend"; //Контекст взаимодействия с сервером
import { object2Base64XML } from "../../../core/utils"; //Вспомогательные функции

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

//Состояние открытия разделов
const useFilters = () => {
    //Собственное состояние - общие значения фильтров
    const [filterValues, setFilterValues] = useState({
        dDateBegin: "",
        dDateEnd: "",
        sCustomerDept: "",
        sCustomerDeptName: "",
        sWorkType: "",
        sWorkKind: "",
        sEqconfig: ""
    });

    //Собственное состояние - признак загрузки настроек
    const [isFiltersLoaded, setIsFiltersLoaded] = useState(false);

    //Собственное состояние - признак инициализации
    const [filtersInit, setFiltersInit] = useState(true);

    //Подключение к контексту взаимодействия с сервером
    const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);

    //При изменении фильтров
    const handleChange = useCallback(
        async ({ filter }) => {
            //Формируем новые фильтры
            const newFilters = { ...filterValues, ...filter };

            //Если фильтры изменились - обновим их
            if (JSON.stringify(filterValues) != JSON.stringify(newFilters)) {
                await executeStored({
                    stored: "UDO_PKG_P8PANELS_USETTINGS.SETTINGS_SET",
                    args: {
                        SPANEL: "repair_anl_atc",
                        CSETTINGS: {
                            VALUE: object2Base64XML(newFilters, { arrayNodeName: "filters" }),
                            SDATA_TYPE: SERV_DATA_TYPE_CLOB
                        }
                    }
                });
                setFilterValues({ ...newFilters });
            }

            //Это не инициализация
            filtersInit ? setFiltersInit(false) : false;
        },
        [SERV_DATA_TYPE_CLOB, executeStored, filterValues, filtersInit]
    );

    //При загрузке панели
    useEffect(() => {
        //Загрузка настроек с сервера
        const loadSettings = async () => {
            try {
                const data = await executeStored({
                    stored: "UDO_PKG_P8PANELS_USETTINGS.SETTINGS_GET",
                    args: { SPANEL: "repair_anl_atc" },
                    respArg: "COUT"
                });
                //Если есть настройки - указываем
                if (data) setFilterValues(pv => ({ ...pv, ...data }));
            } finally {
                setIsFiltersLoaded(true);
            }
        };
        if (!isFiltersLoaded) loadSettings();
    }, [executeStored, isFiltersLoaded]);

    //Возвращаем функции открытия разделов
    return [filterValues, isFiltersLoaded, filtersInit, handleChange];
};

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

export { useFilters };
