/*
    Парус 8 - Панели мониторинга - Редактор панелей
    Компоненты: Таблица (представление)
*/

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

import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Paper } from "@mui/material"; //Интерфейсные элементы
import { APP_STYLES } from "../../../../../app.styles"; //Типовые стили
import { P8PDataGrid } from "../../../../components/p8p_data_grid"; //Таблица данных
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { useDataSource } from "../../../../components/editors/p8p_data_source_hooks"; //Хуки для данных
import { P8P_DATA_SOURCE_SHAPE } from "../../../../components/editors/p8p_data_source_common"; //Общие ресурсы источника данных
import {
    P8P_COMPONENT_INLINE_MESSAGE_TYPE,
    P8P_COMPONENT_INLINE_MESSAGE,
    P8PComponentInlineMessage
} from "../../../../components/editors/p8p_component_inline_message"; //Информационное сообщение внутри компонента

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

//Иконка компонента
const COMPONENT_ICON = "table_view";

//Наименование компонента
const COMPONENT_NAME = "Таблица";

//Стили
const STYLES = {
    CONTAINER: { display: "flex", height: "100%", overflow: "hidden" },
    DATA_GRID: { width: "100%" },
    DATA_GRID_CONTAINER: {
        height: `calc(100%)`,
        ...APP_STYLES.SCROLL
    }
};

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

//Таблица (представление)
const Table = ({ dataSource = null, values = {} } = {}) => {
    //Собственное состояние - данные
    const [data, error] = useDataSource({ dataSource, values });

    //Флаг настроенности таблицы
    const haveConfing = dataSource?.stored ? true : false;

    //Флаг наличия данных
    const haveData = data?.init === true && !error ? true : false;

    //Данные таблицы
    const dataGrid = data?.XDATA_GRID || {};

    //Формирование представления
    return (
        <Paper
            {...(haveConfing && haveData
                ? { sx: { ...STYLES.CONTAINER } }
                : { className: "component-view__container component-view__container__empty" })}
            elevation={6}
        >
            {haveConfing && haveData ? (
                <P8PDataGrid
                    {...P8P_DATA_GRID_CONFIG_PROPS}
                    {...dataGrid}
                    style={STYLES.DATA_GRID}
                    containerComponentProps={{ sx: STYLES.DATA_GRID_CONTAINER, elevation: 0 }}
                />
            ) : (
                <P8PComponentInlineMessage
                    icon={COMPONENT_ICON}
                    name={COMPONENT_NAME}
                    message={!haveConfing ? P8P_COMPONENT_INLINE_MESSAGE.NO_SETTINGS : error ? error : P8P_COMPONENT_INLINE_MESSAGE.NO_DATA_FOUND}
                    type={error ? P8P_COMPONENT_INLINE_MESSAGE_TYPE.ERROR : P8P_COMPONENT_INLINE_MESSAGE_TYPE.COMMON}
                />
            )}
        </Paper>
    );
};

//Контроль свойств компонента - Таблица (представление)
Table.propTypes = {
    dataSource: P8P_DATA_SOURCE_SHAPE,
    values: PropTypes.object
};

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

export default Table;
