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

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

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

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

//Состояние открытия разделов
const useDictionary = () => {
    //Подключение к контексту приложения
    const { pOnlineShowDictionary, pOnlineShowUnit } = useContext(ApplicationСtx);

    //Отображение раздела "Штатные подразделения"
    const handleInsDepartmentOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "INS_DEPARTMENT",
                inputParameters: [{ name: "in_CODE", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Типовые работы по техническому обслуживанию и ремонту"
    const handleEquipTypeWorksOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "EquipTypeWorks",
                inputParameters: [{ name: "in_CODE", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Виды работ по техническому обслуживанию и ремонту"
    const handleEquipWorkKindsOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "EquipWorkKinds",
                inputParameters: [{ name: "in_CODE", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Ремонтные ведомости"
    const handleEquipRepairSheetsOpen = useCallback(
        async prms => {
            // pOnlineShowDictionary({
            //     unitCode: "EquipRepairSheets",
            //     inputParameters: [{ name: "in_RN", value: prms.nRn }],
            //     callBack: res => {
            //         res.success ? prms.callBack(res) : null;
            //     }
            // });

            pOnlineShowUnit({
                unitCode: "EquipRepairSheets",
                inputParameters: [{ name: "in_RN", value: prms.nRn }],
                modal: false
            });
        },
        [pOnlineShowUnit]
    );

    //Отображение раздела "Состав оборудования"
    const handleEquipConfigurationOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "EquipConfiguration",
                inputParameters: [{ name: "in_CODE", value: prms.sCode ? prms.sCode.toString() : null }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Присоединенные документы"
    const handleFileLinksOpen = useCallback(
        async prms => {
            pOnlineShowUnit({
                unitCode: "FileLinks",
                showMethod: "link",
                inputParameters: [
                    { name: "sel_document", value: prms.nRn },
                    { name: "sel_unitcode", value: "EquipRepairSheets" }
                ],
                modal: false
            });
        },
        [pOnlineShowUnit]
    );

    //Возвращаем функции открытия разделов
    return {
        handleInsDepartmentOpen,
        handleEquipTypeWorksOpen,
        handleEquipWorkKindsOpen,
        handleEquipRepairSheetsOpen,
        handleEquipConfigurationOpen,
        handleFileLinksOpen
    };
};

//Состояние дополнительных общих процедур
const useProcedures = () => {
    //Подключение к контексту взаимодействия с сервером
    const { executeStored } = useContext(BackEndСtx);

    //Считывание наименования подразделения по мнемокоду
    const handleInsDepartmentNameGet = useCallback(
        async prms => {
            //Считываем наименование подразделения
            const departmentName = await executeStored({
                stored: "UDO_PKG_P8PANELS_RPR_ANL.GET_INS_DEPARTMENT_NAME",
                args: { SCODE: prms.code }
            });
            //Возвращаем наименование подразделения
            return departmentName.SNAME;
        },
        [executeStored]
    );

    //Возвращаем дополнительные функции
    return { handleInsDepartmentNameGet };
};

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

export { useDictionary, useProcedures };
