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

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

import React, { useState } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Box, Button, Dialog, DialogTitle, DialogContent, TextField, DialogActions } from "@mui/material"; //Интерфейсные элементы
import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы

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

//Диалог включения рабочего в сменное задание
const CostJobsSpecsInclude = ({ includePrms, setShowInclude, setCostJobsSpecs, setCostJobsWorkers, includeWorker }) => {
    //Собственное состояние - Значение приоритета
    const [state, setState] = useState(includePrms.NQUANT_PLAN);

    //При закрытии включения рабочего
    const handlePriorEditClose = () => setShowInclude(false);

    //При включении рабочего в строку сменного задания
    const costJobsSpecIncludeCostEquipment = () => {
        //Делаем асинхронно, чтобы при ошибке ничего не обновлять
        const includeAsync = async () => {
            //Включаем рабочего в строку сменного задания
            try {
                await includeWorker({
                    NFCJOBSSP: includePrms.NFCJOBSSP,
                    SELECTED_WORKERS: includePrms.SELECTED_WORKERS,
                    NQUANT_PLAN: state
                });
                //Необходимо обновить все данные
                setCostJobsSpecs(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true }));
                setCostJobsWorkers(pv => ({ ...pv, selectedRows: [], pageNumber: 1, reload: true }));
                handlePriorEditClose();
            } catch (e) {
                throw new Error(e.message);
            }
        };
        //Включаем рабочего асинхронно
        includeAsync();
    };

    return (
        <Dialog open onClose={() => handlePriorEditClose()}>
            <DialogTitle>Включить в задание</DialogTitle>
            <DialogContent>
                <Box>
                    <TextField
                        name="editInculdeValue"
                        label="Количество"
                        variant="standard"
                        fullWidth
                        InputProps={{
                            type: "number",
                            inputProps: {
                                max: includePrms.NQUANT_PLAN,
                                min: 0
                            }
                        }}
                        value={state}
                        onChange={event => {
                            var value = parseInt(event.target.value, 10);
                            if (value > includePrms.NQUANT_PLAN) {
                                value = includePrms.NQUANT_PLAN;
                            }
                            if (value < 0) {
                                value = 0;
                            }
                            setState(value);
                        }}
                    />
                    <Box></Box>
                </Box>
            </DialogContent>
            <DialogActions>
                <Button onClick={costJobsSpecIncludeCostEquipment}>{BUTTONS.OK}</Button>
                <Button onClick={() => handlePriorEditClose(null)}>{BUTTONS.CANCEL}</Button>
            </DialogActions>
        </Dialog>
    );
};

//Контроль свойств - Диалог включения рабочего в сменное задание
CostJobsSpecsInclude.propTypes = {
    includePrms: PropTypes.object.isRequired,
    setShowInclude: PropTypes.func.isRequired,
    setCostJobsSpecs: PropTypes.func.isRequired,
    setCostJobsWorkers: PropTypes.func.isRequired,
    includeWorker: PropTypes.func.isRequired
};

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

export { CostJobsSpecsInclude };
