/*
    Парус 8 - Панели мониторинга - УДП - Доски задач
    Пользовательские хуки: Хуки открытия разделов
*/

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

import { useContext, useCallback } from "react"; //Классы React
import { ApplicationCtx } from "../../../context/application"; //Контекст приложения

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

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

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

    //Отображение раздела "Клиенты"
    const handleClientClientsOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "ClientClients",
                showMethod: "main",
                inputParameters: [{ name: "in_CLIENT_CODE", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Каталоги"
    const handleCatalogTreeOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "CatalogTree",
                showMethod: "main",
                inputParameters: [
                    { name: "in_DOCNAME", value: prms.sUnitName },
                    { name: "in_NAME", value: prms.sName },
                    { name: "in_RN", value: prms.nRn }
                ],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Типы событий"
    const handleEventTypesOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "ClientEventTypes",
                showMethod: "dictionary",
                inputParameters: [{ name: "pos_eventtypecode", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Контрагенты"
    const handleAgnlistOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "AGNLIST",
                showMethod: "agents",
                inputParameters: [{ name: "pos_agnmnemo", value: prms.sMnemo }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Штатные подразделения"
    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 handleCostStaffGroupsOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "CostStaffGroups",
                inputParameters: [{ name: "in_CODE", value: prms.sCode }],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Дополнительные словари"
    const handleExtraDictionariesOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "ExtraDictionaries",
                showMethod: "values",
                inputParameters: [
                    { name: "pos_rn", value: prms.nRn },
                    { name: prms.sParamName, value: prms.paramValue }
                ],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Маршруты событий (исполнители в точках)"
    const handleEventRoutesPointExecutersOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "EventRoutesPointExecuters",
                showMethod: "executers",
                inputParameters: prms.inputParameters,
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "События"
    const handleClientEventsOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "ClientEvents",
                inputParameters: [{ name: "in_Ident", value: prms.nIdent }]
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "События (примечания)"
    const handleClientEventsNotesOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "ClientEventsNotes",
                showMethod: "main",
                inputParameters: [{ name: "in_PRN", value: prms.nPrn }]
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Присоединенные документы"
    const handleFileLinksOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "FileLinks",
                showMethod: "main_link",
                inputParameters: [
                    { name: "in_PRN", value: prms.nPrn },
                    { name: "in_UNITCODE", value: prms.sUnitCode }
                ]
            });
        },
        [pOnlineShowDictionary]
    );

    //Отображение раздела "Маршруты событий (точки перехода)"
    const handleEventRoutesPointsPassessOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: "EventRoutesPointsPasses",
                showMethod: "main_passes",
                inputParameters: [
                    { name: "in_ENVTYPE_CODE", value: prms.sEventType },
                    { name: "in_ENVSTAT_CODE", value: prms.sEventStatus },
                    { name: "in_POINT", value: prms.nPoint }
                ],
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    //Универсальное отображение раздела
    const handleUnitOpen = useCallback(
        async prms => {
            pOnlineShowDictionary({
                unitCode: prms.sUnitCode,
                showMethod: prms.sShowMethod,
                inputParameters: prms.inputParameters,
                callBack: res => {
                    res.success ? prms.callBack(res) : null;
                }
            });
        },
        [pOnlineShowDictionary]
    );

    return {
        handleClientPersonOpen,
        handleClientClientsOpen,
        handleCatalogTreeOpen,
        handleEventTypesOpen,
        handleAgnlistOpen,
        handleInsDepartmentOpen,
        handleCostStaffGroupsOpen,
        handleExtraDictionariesOpen,
        handleEventRoutesPointExecutersOpen,
        handleClientEventsOpen,
        handleClientEventsNotesOpen,
        handleFileLinksOpen,
        handleEventRoutesPointsPassessOpen,
        handleUnitOpen
    };
};

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

export { useDictionary };
