package com.persagy.adm.diagram.core;

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.persagy.adm.diagram.core.model.Diagram;
import com.persagy.adm.diagram.core.model.legend.Legend;
import com.persagy.adm.diagram.core.model.template.DiagramTemplate;
import com.persagy.adm.diagram.entity.DiagramType;

import java.util.List;

/**
 * IO策略接口
 *
 * @author zhaoyk
 */
public interface DataStrategy {

    String implQualifier = "dataStrategyImpl";

    List<DiagramType> getDiagramTypes();

    //模板
    List<DiagramTemplate> getTemplates();

    List<DiagramTemplate> getTemplates(String diagramType);

    DiagramTemplate saveTemplate(DiagramTemplate template);

    boolean deleteTemplate(String templateId);

    DiagramTemplate getTemplate(String templateId);


    //图例
    List<Legend> getLegends(String systemCode);

    Legend saveLegend(Legend legend, String systemCode);

    boolean deleteLegend(String legendId, String systemCode);

    Legend getLegend(String legendId, String systemCode);

    List<Legend> getLegendsForEquipment(String equipmentType);


    //系统图
    List<Diagram> getDiagrams(String projectId, String systemId, String groupCode);

    List<Diagram> getDiagrams(String diagramType, String projectId, String systemId, String groupCode, String name); //按系统图类型查询

    Diagram saveDiagram(Diagram diagram);

    boolean deleteDiagram(String diagramId);

    Diagram getDiagram(String diagramId);


    //系统图数据
    List<ObjectNode> loadObjectsByType(List<String> equipmentTypes, String projectId, String systemId, String groupCode);

    List<ObjectNode> loadRelationsByType(List<String[]> relationTypes, List<String> objectIds, String projectId, String groupCode);

    List<ObjectNode> loadObjectsById(List<String> objectIds, String projectId, String groupCode);

    List<ObjectNode> loadRelationsById(List<String> relationIds, String projectId, String groupCode);

    /**
     * 获取所有系统实例
     *
     * @param projectId 项目id
     * @param groupCode 集团code
     * @return 实例列表
     */
    List<ObjectNode> loadSystemInstance(String projectId, String groupCode);

    /**
     * 项目下的专业 -> 系统 ->系统实例 的树状结构数据
     *
     * @return 列表
     */
    List<ObjectNode> loadMajorSystemInstance();

    /**
     * 根据系统类获取系统类型下的模板列表  以树状结构数据返回
     *
     * @param diagram diagram.getSystem() 参数
     * @return
     */
    List<ObjectNode> loadSystemTypeTemplate(Diagram diagram);
}
