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

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

import { useState, useContext, useEffect } from "react"; //Классы React
import { BackEndCtx } from "../../context/backend"; //Контекст взаимодействия с сервером

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

//Детали этапа проекта - информация об этапе
const useStageDetailInfoDataGrid = ({ stageRn }) => {
    //Собственное состояние - флаг загрузки
    const [isLoading, setLoading] = useState(false);

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

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

    //При необходимости обновить данные таблицы
    useEffect(() => {
        //Загрузка данных таблицы с сервера
        const loadData = async () => {
            try {
                setLoading(true);
                const data = await executeStored({
                    stored: "PKG_P8PANELS_PROJECTS.INFO_STAGE_DTL_DG",
                    args: { NPROJECTSTAGE: stageRn },
                    respArg: "COUT",
                    loader: true
                });
                setData(pv => ({ ...pv, ...data.XDATA_GRID, init: true }));
            } finally {
                setLoading(false);
            }
        };
        if (stageRn) loadData();
    }, [stageRn, executeStored]);

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

//Детали этапа проекта - структура цены - таблица данных
const useStageDetailArtsDataGrid = ({ stageRn }) => {
    //Собственное состояние - флаг загрузки
    const [isLoading, setLoading] = useState(false);

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

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

    //При необходимости обновить данные таблицы
    useEffect(() => {
        //Загрузка данных таблицы с сервера
        const loadData = async () => {
            try {
                setLoading(true);
                const artsData = await executeStored({
                    stored: "PKG_P8PANELS_PROJECTS.INFO_STAGE_ARTS_DG",
                    args: { NPROJECTSTAGE: stageRn },
                    respArg: "COUT",
                    loader: true
                });
                setData(pv => ({ ...pv, ...artsData.XDATA_GRID, init: true }));
            } finally {
                setLoading(false);
            }
        };
        if (stageRn) loadData();
    }, [stageRn, executeStored, SERV_DATA_TYPE_CLOB]);

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

//Детали этапа проекта - структура цены - график
const useStageDetailArtsChart = ({ stageRn, display, type }) => {
    //Собственное состояние - флаг загрузки
    const [isLoading, setLoading] = useState(false);

    //Собственное состояние - график
    const [data, setData] = useState({ init: false, currentType: null });

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

    //При необходимости обновить данные таблицы
    useEffect(() => {
        //Загрузка данных таблицы с сервера
        const loadData = async () => {
            try {
                setLoading(true);
                const data = await executeStored({
                    stored: "PKG_P8PANELS_PROJECTS.INFO_STAGE_ARTS_CHART",
                    args: { NPROJECTSTAGE: stageRn, NTYPE: type },
                    respArg: "COUT",
                    loader: true
                });
                setData(pv => ({ ...pv, ...data.XCHART, currentType: type, init: true }));
            } finally {
                setLoading(false);
            }
        };
        if (stageRn && display && data.currentType != type) loadData();
    }, [stageRn, display, type, data.currentType, executeStored]);

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

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

export { useStageDetailInfoDataGrid, useStageDetailArtsDataGrid, useStageDetailArtsChart };
