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

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

import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Box, TextField } from "@mui/material"; //Интерфейсные компоненты
import { getInputProps } from "./task_form"; //Формирование кнопки доступа к разделу
import { COMMON_STYLES } from "../styles"; //Общие стили
import { useDictionary } from "../hooks/dict_hooks"; //Состояние открытия разделов

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

//Стили
const STYLES = {
    BOX_FEW_COLUMNS: { display: "flex", flexWrap: "wrap", justifyContent: "space-between" }
};

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

//Вкладка основной информации
const TaskFormTabInfo = ({ task, editable, onFieldEdit, onEventNextNumbGet }) => {
    //Вспомогательные функции открытия раздела
    const { handleClientPersonOpen, handleCatalogTreeOpen, handleClientClientsOpen } = useDictionary();

    //При изменении каталога
    const handleCrnChange = () =>
        handleCatalogTreeOpen({
            sUnitName: "ClientEvents",
            sName: task.sCrn,
            callBack: res => {
                onFieldEdit({
                    target: {
                        id: "sCrn",
                        value: res.outParameters.out_NAME
                    }
                });
            }
        });

    //При изменении клиента-сотрудника
    const handleClntClnpersonChange = () =>
        handleClientPersonOpen({
            sCode: task.sClntClnperson,
            callBack: res => {
                onFieldEdit({
                    target: {
                        id: "sClntClnperson",
                        value: res.outParameters.out_CODE
                    }
                });
            }
        });

    //При изменении клиента-организации
    const handleClntClientsChange = () =>
        handleClientClientsOpen({
            sCode: task.sClntClients,
            callBack: res => {
                onFieldEdit({
                    target: {
                        id: "sClntClients",
                        value: res.outParameters.out_CLIENT_CODE
                    }
                });
            }
        });

    //Генерация содержимого
    return (
        <Box>
            <Box sx={COMMON_STYLES.BOX_WITH_LEGEND} component="fieldset">
                <legend style={COMMON_STYLES.LEGEND}>Событие</legend>
                <Box sx={STYLES.BOX_FEW_COLUMNS}>
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD()}
                        id="sCrn"
                        label="Каталог"
                        fullWidth
                        value={task.sCrn}
                        variant="standard"
                        onChange={onFieldEdit}
                        InputProps={getInputProps(handleCrnChange, task.isUpdate || task.nClosed === 1)}
                        required
                        disabled={task.isUpdate}
                    />
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD("225px")}
                        id="sPrefix"
                        label="Префикс"
                        value={task.sPrefix}
                        variant="standard"
                        onChange={onFieldEdit}
                        required
                        disabled={task.isUpdate}
                    ></TextField>
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD("225px")}
                        id="sNumber"
                        label="Номер"
                        value={task.sNumber}
                        variant="standard"
                        onChange={onFieldEdit}
                        required
                        disabled={task.isUpdate}
                        InputProps={getInputProps(onEventNextNumbGet, !task.sPrefix || task.isUpdate, "refresh")}
                    ></TextField>
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD("225px", !task.isUpdate)}
                        id="sType"
                        label="Тип"
                        value={task.sType}
                        variant="standard"
                        onChange={onFieldEdit}
                        disabled
                        required
                    ></TextField>
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD("225px", !task.isUpdate)}
                        id="sStatus"
                        label="Статус"
                        value={task.sStatus}
                        variant="standard"
                        disabled
                        required
                        onChange={onFieldEdit}
                    ></TextField>
                    <TextField
                        sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD()}
                        fullWidth
                        id="sDescription"
                        label="Описание"
                        value={task.sDescription}
                        variant="standard"
                        onChange={onFieldEdit}
                        disabled={!task.sType || !editable}
                        required
                        multiline
                        minRows={7}
                        maxRows={7}
                    ></TextField>
                </Box>
            </Box>
            <Box sx={{ ...COMMON_STYLES.BOX_WITH_LEGEND, ...COMMON_STYLES.BOX_SINGLE_COLUMN }} component="fieldset">
                <legend style={COMMON_STYLES.LEGEND}>Клиент</legend>
                <TextField
                    sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD()}
                    id="sClntClients"
                    label="Организация"
                    value={task.sClntClients}
                    variant="standard"
                    onChange={onFieldEdit}
                    disabled={!task.sType || task.nClosed === 1}
                    InputProps={getInputProps(() => handleClntClientsChange(), !task.sType || task.nClosed === 1)}
                ></TextField>
                <TextField
                    sx={COMMON_STYLES.TASK_FORM_TEXT_FIELD()}
                    id="sClntClnperson"
                    label="Сотрудник"
                    value={task.sClntClnperson}
                    variant="standard"
                    onChange={onFieldEdit}
                    disabled={!task.sType || task.nClosed === 1}
                    InputProps={getInputProps(() => handleClntClnpersonChange(), !task.sType || task.nClosed === 1)}
                ></TextField>
            </Box>
        </Box>
    );
};

//Контроль свойств - Вкладка основной информации
TaskFormTabInfo.propTypes = {
    task: PropTypes.object.isRequired,
    editable: PropTypes.bool.isRequired,
    onFieldEdit: PropTypes.func.isRequired,
    onEventNextNumbGet: PropTypes.func.isRequired
};

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

export { TaskFormTabInfo };
