/*
    Парус 8 - Панели мониторинга - ПУП - Информация о проектах
    Список этапов проекта: пользовательские хуки для взаимодействия с сервером
*/

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

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

//---------
//Константы
//---------

//Размер страницы данных
const DATA_GRID_PAGE_SIZE = config.SYSTEM.PAGE_SIZE;

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

//Этапы проекта
const useStagesDataGrid = ({ projectRn, pageNumber, orders }) => {
    //Собственное состояние - флаг загрузки
    const [isLoading, setLoading] = useState(false);

    //Собственное состояние - таблица данных
    const [data, setData] = useState({ init: false, morePages: true });

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

    //При необходимости обновить данные таблицы
    useEffect(() => {
        //Загрузка данных таблицы с сервера
        const loadData = async () => {
            try {
                setLoading(true);
                const data = await executeStored({
                    stored: "PKG_P8PANELS_PROJECTS.INFO_STAGES_DG",
                    args: {
                        NPROJECT: projectRn,
                        CORDERS: { VALUE: object2Base64XML(orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
                        NPAGE_NUMBER: pageNumber,
                        NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
                        NINCLUDE_DEF: pageNumber == 1 ? 1 : 0
                    },
                    respArg: "COUT",
                    loader: true,
                    attributeValueProcessor: (name, val) => (["DBEGPLAN", "DENDPLAN"].includes(name) ? formatDateRF(val) : val)
                });
                setData(pv => ({
                    ...pv,
                    columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef || [],
                    rows: pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...(pv.rows || []), ...(data.XDATA_GRID.rows || [])],
                    morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,
                    init: true
                }));
            } finally {
                setLoading(false);
            }
        };
        if (projectRn) loadData();
    }, [projectRn, orders, pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);

    //Возвращаем интерфейс хука
    return [data, isLoading];
};

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

export { useStagesDataGrid };
