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

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

import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Paper } from "@mui/material"; //Интерфейсные элементы
import { P8PIndicator } from "../../../../components/p8p_indicator"; //Компонент индикатора
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 = "speed";

//Наименование компонента
const COMPONENT_NAME = "Индикатор";

//Стили
const STYLES = {
    CONTAINER: { height: "100%" }
};

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

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

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

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

    //Данные индикатора
    const indicator = data?.XINDICATOR || {};

    //Формирование представления
    return (
        <Paper
            {...(haveConfing && haveData
                ? { sx: { ...STYLES.CONTAINER } }
                : { className: "component-view__container component-view__container__empty" })}
            elevation={6}
        >
            {haveConfing && haveData ? (
                <P8PIndicator {...indicator} 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>
    );
};

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

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

export default Indicator;
