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

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

import React, { useContext } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Icon, Button, FormControlLabel, Checkbox } from "@mui/material"; //Интерфейсные элементы
import { MessagingCtx } from "../../../../context/messaging"; //Контекст сообщений приложения
import { BUTTONS } from "../../../../../app.text"; //Общие текстовые ресурсы
import { RELATION_SHAPE } from "../relation/relation"; //Описание связи
import { useQueryRelations } from "./hooks"; //Хуки для работы со связями

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

//Стили
const STYLES = {
    MANDATORY_FORMCONTROLLABEL: {
        width: "100%",
        display: "flex",
        justifyContent: "center",
        alignItems: "center"
    }
};

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

//Компонент инспектора - Связи запроса
const InspectorQueryRelations = ({ query, relation, onOptionsChanged }) => {
    //Подключение к контексту сообщений
    const { showMsgWarn } = useContext(MessagingCtx);

    //Работа со связями на сервере
    const { removeRl, setRlMandatory } = useQueryRelations(query);

    //Уведомление родителя об изменении свойств
    const notifyOptionsChanged = () => onOptionsChanged && onOptionsChanged();

    //При нажатии на кнопку даления связи из запроса
    const handleRelationRemoveClick = () =>
        showMsgWarn(`Удалить связь "${relation.source}" - "${relation.target}"?`, async () => {
            if (relation?.id) {
                await removeRl(relation.id);
                notifyOptionsChanged();
            }
        });

    //При изменении состояния обязательности связи в запросе
    const handleRelationMandatoryChange = async e => {
        await setRlMandatory(relation.id, e.target.checked === true ? 1 : 0);
        notifyOptionsChanged();
    };

    //Формирование представления
    return (
        <>
            <FormControlLabel
                sx={STYLES.MANDATORY_FORMCONTROLLABEL}
                control={<Checkbox checked={relation.mandatory === 1 ? true : false} onChange={handleRelationMandatoryChange} />}
                label={"Обязательна"}
            />
            <Button startIcon={<Icon>delete</Icon>} onClick={handleRelationRemoveClick}>
                {BUTTONS.DELETE}
            </Button>
        </>
    );
};

//Контроль свойств компонента - Компонент инспектора - Связи запроса
InspectorQueryRelations.propTypes = {
    query: PropTypes.number.isRequired,
    relation: RELATION_SHAPE.isRequired,
    onOptionsChanged: PropTypes.func
};

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

export { InspectorQueryRelations };
