/*
    Парус 8 - Панели мониторинга - ПУП - Информация о проектах
    Детальная информация об этапе проекта: дополнительная разметка и вёрстка клиентских элементов
*/

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

import React from "react"; //Классы React
import { Link } from "@mui/material"; //Интерфейсные элементы
import { APP_STYLES } from "../../../app.styles"; //Типовые стили
import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы
import { formatNumberRFCurrency } from "../../core/utils"; //Вспомогательные функции
import { formatCostStatusValue } from "./layouts"; //Общие стили и разметка панели
import { formatStageStatusValue } from "./stages_layouts"; //Cтили и разметка списка этапов проекта

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

//Высота заголовка информационного блока
const DATA_AREA_HEADER_HEIGHT = "52px";

//Стили
const STYLES = {
    STAGE_DETAIL_DRAWER: { flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "70%", boxSizing: "border-box", ...APP_STYLES.SCROLL } },
    STAGE_DETAIL_HEADER: {
        height: APP_BAR_HEIGHT,
        paddingLeft: "24px",
        backgroundColor: "#1976d2",
        display: "flex",
        alignItems: "center",
        justifyContent: "flex-start"
    },
    STAGE_DETAIL_CLOSE_BUTTON: { color: "white", marginBottom: "3px" },
    DATA_AREA_CONTAINER: { paddingLeft: "10px", paddingRight: "10px" },
    DATA_AREA: { height: `calc(100vh - ${APP_BAR_HEIGHT} - ${DATA_AREA_HEADER_HEIGHT} - 10px)`, overflowY: "auto", ...APP_STYLES.SCROLL },
    DATA_AREA_HEADER_CONTAINER: { display: "flex", justifyContent: "space-between" },
    DATA_AREA_HEADER: { paddingTop: "10px", paddingBottom: "10px" },
    DATA_GRID_HEADER: { fontSize: "10pt", padding: "6px 10px" },
    DATA_GRID_CELL: value => ({ fontSize: "9pt", padding: "6px 10px", ...(value ? { color: value > 0 ? "green" : "red" } : {}) }),
    CHART_CONTAINER: { paddingTop: "20px" },
    CHART: { maxHeight: "60vh", display: "flex", justifyContent: "center" }
};

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

//Форматирование заголовков колонок таблицы "Сведения"
const stageDetailInfoHeadCellRender = ({ columnDef }) => {
    //Инициализируем общий стиль ячеек
    let cellStyle = STYLES.DATA_GRID_HEADER;
    //Формирование представлений
    switch (columnDef.name) {
        case "SATTR":
            return { cellStyle, stackProps: { justifyContent: "left" } };
        case "SVALUE":
            return { cellStyle, stackProps: { justifyContent: "right" } };
        default:
            return { cellStyle: cellStyle };
    }
};

//Форматирование ячеек строк таблицы "Сведения"
const stageDetailInfoDataCellRender = ({ row, columnDef }) => {
    //Инициализируем общий стиль ячеек
    let cellStyle = STYLES.DATA_GRID_CELL();
    //Формирование представлений
    switch (columnDef.name) {
        case "SATTR":
            return { cellStyle: { ...cellStyle, color: "#1976d2" }, cellProps: { align: "left" } };
        case "SVALUE": {
            const res = { cellStyle, cellProps: { align: "right" } };
            if (["NCOST_SUM", "NSTAGE_COST_SUM"].includes(row["SCODE"]))
                res.data = row["SVALUE"] || row["SVALUE"] === 0 ? formatNumberRFCurrency(row["SVALUE"]) : "-";
            if (row["SCODE"] == "NSTATE")
                res.data = formatStageStatusValue({ value: parseInt(row["SVALUE"]), addText: true, justifyContent: "right" });
            return res;
        }
        default:
            return { cellStyle };
    }
};

//Форматирование заголовков колонок таблицы "Структура затрат"
const stageDetailArtsHeadCellRender = ({ columnDef }) => {
    //Инициализируем общий стиль ячеек
    let cellStyle = STYLES.DATA_GRID_HEADER;
    //Формирование представлений
    switch (columnDef.name) {
        case "NSTATE":
            return { cellStyle: { ...cellStyle, justifyContent: "center" }, stackStyle: { justifyContent: "center" } };
        default:
            return { cellStyle: cellStyle };
    }
};

//Форматирование ячеек строк таблицы "Структура затрат"
const stageDetailArtsDataCellRender = ({ row, columnDef, showCostNotesFact }) => {
    //Инициализируем общий стиль ячеек
    let cellStyle = STYLES.DATA_GRID_CELL;
    //Формирование представлений
    switch (columnDef.name) {
        case "NCOST_STATUS":
            return {
                cellProps: { align: "center" },
                data: formatCostStatusValue({ value: row[columnDef.name], type: 0 })
            };
        case "NPLAN_SUM":
        case "NPLAN_FACT_SUM":
            return {
                cellStyle: cellStyle(columnDef.name == "NPLAN_FACT_SUM" ? row[columnDef.name] : null),
                data: row[columnDef.name] || row[columnDef.name] === 0 ? formatNumberRFCurrency(row[columnDef.name]) : "-"
            };
        case "NFACT_SUM":
            return {
                cellStyle: cellStyle(),
                data:
                    row[columnDef.name] || row[columnDef.name] === 0 ? (
                        row[columnDef.name] > 0 ? (
                            <Link component="button" onClick={() => showCostNotesFact({ faceAccRn: row["NFACEACC"], artclRn: row["NFPDARTCL"] })}>
                                {formatNumberRFCurrency(row[columnDef.name])}
                            </Link>
                        ) : (
                            formatNumberRFCurrency(row[columnDef.name])
                        )
                    ) : (
                        "-"
                    )
            };
        default:
            return { cellStyle: cellStyle(), data: row[columnDef.name] };
    }
};

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

export {
    STYLES as STAGE_DETAIL_STYLES,
    stageDetailInfoHeadCellRender,
    stageDetailInfoDataCellRender,
    stageDetailArtsHeadCellRender,
    stageDetailArtsDataCellRender
};
