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

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

import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { P8PEditorBox } from "../../../../components/editors/p8p_editor_box"; //Контейнер параметров редактора
import { P8PEditorSubHeader } from "../../../../components/editors/p8p_editor_sub_header"; //Подзаголовок группы параметров редактора
import { ENTITY_SHAPE } from "../entity/entity"; //Описание сущности
import { RELATION_SHAPE } from "../relation/relation"; //Описание связи
import { ARGUMENT_SHAPE } from "../argument/argument"; //Описание аргумента запроса
import { InspectorQueryArguments } from "../inspector_query_args/inspector_query_args"; //Управление аргументами запроса
import { InspectorQueryConditions } from "../inspector_query_cond/inspector_query_cond"; //Управление условиями отбора запроса
import { InspectorQueryEntities } from "../inspector_query_ents/inspector_query_ents"; //Управление сущностями запроса
import { InspectorQueryRelations } from "../inspector_query_rls/inspector_query_rls"; //Управление связями запроса
import { InspectorQueryArea } from "../inspector_query_area/inspector_query_area"; //Область SQL-выражения

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

//Инспектор свойств
const Inspector = ({
    query,
    entity,
    relation,
    entities = [],
    args = [],
    cond = null,
    substArgsVals = 0,
    qry = "",
    qryBnd = "",
    qryMsg = "",
    onOptionsChanged = null
}) => {
    //При изменении настроек запроса
    const handleOptionsChanged = () => onOptionsChanged && onOptionsChanged();

    //Генерация содержимого
    return (
        <P8PEditorBox title={"Настройки запроса"}>
            <P8PEditorSubHeader title={"Аргументы"} />
            <InspectorQueryArguments query={query} args={args} onOptionsChanged={handleOptionsChanged} />
            <P8PEditorSubHeader title={"Условия отбора"} />
            <InspectorQueryConditions query={query} cond={cond} entities={entities} args={args} onOptionsChanged={handleOptionsChanged} />
            <P8PEditorSubHeader title={"Сущности"} />
            <InspectorQueryEntities query={query} entity={entity} onOptionsChanged={handleOptionsChanged} />
            {relation && (
                <>
                    <P8PEditorSubHeader title={"Связь"} />
                    <InspectorQueryRelations query={query} relation={relation} onOptionsChanged={handleOptionsChanged} />
                </>
            )}
            <InspectorQueryArea query={query} substArgsVals={substArgsVals} qry={qry} qryBnd={qryBnd} qryMsg={qryMsg} />
        </P8PEditorBox>
    );
};

//Контроль свойств компонента - Инспектор свойств
Inspector.propTypes = {
    query: PropTypes.number.isRequired,
    entity: ENTITY_SHAPE,
    relation: RELATION_SHAPE,
    entities: PropTypes.arrayOf(ENTITY_SHAPE),
    args: PropTypes.arrayOf(ARGUMENT_SHAPE),
    cond: PropTypes.string,
    substArgsVals: PropTypes.number,
    qry: PropTypes.string,
    qryBnd: PropTypes.string,
    qryMsg: PropTypes.string,
    onOptionsChanged: PropTypes.func
};

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

export { Inspector };
