/*
    Парус 8 - Панели мониторинга - ТОиР - Гаражка
    Дополнительная разметка и вёрстка клиентских элементов
*/

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

import React from "react"; //Классы React
import { Icon, Stack, Link, Typography } from "@mui/material"; //Интерфейсные компоненты
import { hasValue, formatDateRF } from "../../core/utils"; //Вспомогательные функции

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

//Маска разделителя
const SMASK_SEPARATE = "<|>";

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

//Формирование значения для колонки "Состояние"
const formatStateValue = (value, addText = false) => {
    const [text, icon] =
        value == 0
            ? ["На линии", "done"]
            : value == 1
            ? ["Ремонт", "build"]
            : value == 2
            ? ["Есть повреждения", "construction"]
            : ["Не определен", "question_mark"];
    return (
        <Stack direction="row" gap={0.5} alignItems="center" justifyContent="center">
            <Icon title={text}>{icon}</Icon>
            {addText == true ? text : null}
        </Stack>
    );
};

//Формирование списка значений
const formatListValue = value => {
    //Считываем массив значений
    const listValues = hasValue(value) ? value.split(SMASK_SEPARATE) : [];
    //Формируем список значений
    return (
        <>
            {listValues.length !== 0 ? (
                <Stack direction="column" gap={0.5} alignItems="flex-start" justifyContent="center">
                    {listValues.map((el, index) => {
                        return <Typography variant="body2" key={index}>{`${el}`}</Typography>;
                    })}
                </Stack>
            ) : null}
        </>
    );
};

//Формирование значения для колонки "Документ ремонта"
const formatRepairDocValue = (value, onRepairSheetOpen) => {
    //Считываем массив документов
    const listDocs = hasValue(value) ? value.split(SMASK_SEPARATE) : [];
    //Формируем список документов с ссылкой
    return (
        <>
            {listDocs.length !== 0 ? (
                <Stack direction="column" gap={0.5} alignItems="flex-start" justifyContent="center">
                    {listDocs.map((el, index) => {
                        //Считываем рег. номер
                        const rn = el.match(/<(.*?)>/)[1];
                        //Считываем информацию о документе
                        const docInfo = el.replace(`<${rn}>`, "");
                        //Формируем ссылку на документ
                        return (
                            <Link
                                component="button"
                                align="left"
                                variant="body2"
                                underline="hover"
                                onClick={() => onRepairSheetOpen({ nRn: rn })}
                                key={index}
                            >
                                {docInfo}
                            </Link>
                        );
                    })}
                </Stack>
            ) : null}
        </>
    );
};

//Формирование значения для колонки "Гос. Номер Тягача"
const formatStateNumbTGValue = (row, columnDef, showHaulerUnitsCards) => {
    return (
        <Link component="button" variant="body2" align="left" underline="hover" onClick={() => showHaulerUnitsCards({ nRn: row["NRN"] })}>
            {row[columnDef.name]}
        </Link>
    );
};

//Генерация представления ячейки c данными
export const dataCellRender = ({ row, columnDef, showHaulerUnitsCards }) => {
    switch (columnDef.name) {
        case "SSTATE_NUMB_TG":
            return { data: formatStateNumbTGValue(row, columnDef, showHaulerUnitsCards) };
    }
};

//Форматирование значений колонок
export const valueFormatter = ({ value, columnDef, onRepairSheetOpen }) => {
    switch (columnDef.name) {
        case "NSTATE":
            return formatStateValue(value, false);
        case "SDAMTYPE_NAME":
            return formatListValue(value);
        case "SEQDAMCTRL_NOTE":
            return formatListValue(value);
        case "SDRIVER":
            return formatListValue(value);
        case "SREPAIR_DOC":
            return formatRepairDocValue(value, onRepairSheetOpen);
    }
    return value;
};

//Форматирование фильтров панелей для фильтров таблицы
export const formatFilterValues = filter => {
    return [
        { name: "DDATE", from: formatDateRF(filter.dDate), to: formatDateRF(filter.dDate) },
        { name: "SCUSTOMERDEPT_FILTER", from: filter.sCustomerDept, to: "" }
    ];
};
