/*
    Парус 8 - Панели мониторинга - ТОиР - Прогнозирование технического состояния
    Корневая панель прогнозирования технического состояния: кастомные хуки
*/

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

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

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

//Рег. номер выборки данных по умолчанию
const DS_RN_DEFAULT = -1;

//Код выборки данных по умолчанию
const DS_CODE_DEFAULT = "Не указана";

//Наименование выборки данных по умолчанию
const DS_NAME_DEFAULT = "Не указана";

//Выборка данных по умолчанию
const DS_DEFAULT = { NRN: DS_RN_DEFAULT, SCODE: DS_CODE_DEFAULT, SNAME: DS_NAME_DEFAULT };

//Список типовых задач
const TASK_LIST = [
    { value: null, name: "Не указана" },
    { value: "TCF", name: "TCF - оценка технического состояния (Technical Condition Forecast)" },
    { value: "RUL", name: "RUL - прогнозирование остаточного ресурса (Remaining Useful Life)" },
    { value: "FP", name: "FP - Прогнозирование отказа (Failure Predict)" }
];

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

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

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

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

    //Загрузка данных при изменении зависимостей
    useEffect(() => {
        const loadData = async () => {
            try {
                setLoading(true);
                const data = await executeStored({
                    stored: "UDO_PKG_EQUIPDS.LIST",
                    respArg: "COUT",
                    isArray: name => ["XDS"].includes(name),
                    attributeValueProcessor: (name, val) => (["SNAME"].includes(name) ? undefined : val),
                    loader: false
                });
                setData({ list: [DS_DEFAULT, ...(data?.XDS ? data.XDS : [])], access: data?.NACCESS == 1 ? true : false });
            } finally {
                setLoading(false);
            }
        };
        if (refresh > 0) loadData();
    }, [refresh, executeStored]);

    //Вернём данные
    return { equipDataSelectionList: data.list, equipDataSelectionListIsLoading: isLoading, equipDataSelectionListAccess: data.access };
};

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

export { DS_RN_DEFAULT, TASK_LIST, useEquipDataSelectionList };
