/*
    Парус 8 - Панели мониторинга - Редактор запросов
    Компонент: Диалог настройки аргументов запроса
*/

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

import React, { useState, useContext } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Button, Icon } from "@mui/material"; //Интерфейсные компоненты MUI
import { MessagingCtx } from "../../../../context/messaging"; //Контекст сообщений
import { BUTTONS } from "../../../../../app.text"; //Общие текстовые ресурсы приложения
import { P8PDialog } from "../../../../components/p8p_dialog"; //Типовой диалог
import { ARGUMENT_SHAPE } from "../argument/argument"; //Аргумент запроса
import { ArgsList } from "./args_list"; //Список аргументов запроса
import { ArgIUDialog } from "./arg_iu_dialog"; //Диалог добавления/исправления аргумента

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

//Диалог настройки аргументов запроса
const QueryArgsDialog = ({ args, onArgAdd, onArgEdit, onArgRemove, onClose }) => {
    //Собственное состояние - изменяемый аргумент
    const [modArg, setModArg] = useState(null);

    //Подключение к контексту сообщений
    const { showMsgWarn } = useContext(MessagingCtx);

    //Нажатие на кнопку "Закрыть"
    const handleClose = () => onClose && onClose();

    //При выборе аргумента в списке
    const handleArgSelect = arg => setModArg({ ...arg });

    //При добавлении аргумента
    const handleArgAdd = () => setModArg(true);

    //Удаление аргумента
    const handleArgRemove = arg => showMsgWarn("Удалить аргумент?", () => onArgRemove && onArgRemove(arg));

    //При закрытии диалога добавления/исправления по "ОК"
    const handleIUDialogOk = async values => {
        if (modArg === true) onArgAdd && onArgAdd(values, handleIUDialogCancel);
        else onArgEdit && onArgEdit(values, handleIUDialogCancel);
    };

    //При закрытии диалога добавления/исправления по "Отмена"
    const handleIUDialogCancel = () => setModArg(null);

    //Генерация содержимого
    return (
        <P8PDialog title={`Аргументы запроса`} onClose={handleClose}>
            {modArg && (
                <ArgIUDialog {...(modArg === true ? {} : modArg)} insert={modArg === true} onOk={handleIUDialogOk} onCancel={handleIUDialogCancel} />
            )}
            <Button startIcon={<Icon>add</Icon>} onClick={handleArgAdd}>
                {BUTTONS.INSERT}
            </Button>
            <ArgsList args={args} onSelect={handleArgSelect} onDelete={handleArgRemove} />
        </P8PDialog>
    );
};

//Контроль свойств - Диалог настройки аргументов запроса
QueryArgsDialog.propTypes = {
    args: PropTypes.arrayOf(ARGUMENT_SHAPE),
    onArgAdd: PropTypes.func,
    onArgEdit: PropTypes.func,
    onArgRemove: PropTypes.func,
    onClose: PropTypes.func
};

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

export { QueryArgsDialog };
