package com.persagy.dmp.digital.client;

import cn.hutool.extra.spring.SpringUtil;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.persagy.dmp.basic.model.QueryCriteria;
import com.persagy.dmp.common.model.response.CommonResult;
import com.persagy.dmp.common.utils.ResultHelper;
import com.persagy.dmp.digital.entity.ObjectRelation;

import java.util.List;

/**
 * 物理世界对象Client门面
 * @author Charlie Yu
 * @date 2021-05-15
 */
public class DigitalRelationFacade {

    private static DigitalRelationClient client = SpringUtil.getBean(DigitalRelationClient.class);

    /**
     * 查询物理世界对象关系
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param criteria: 请求参数
     * @return 对象关系数组
     */
    public static List<ObjectRelation> query(String groupCode, String projectId, String appId,
                                             String userId, QueryCriteria criteria) {
        CommonResult<List<ObjectRelation>> result = client.query(groupCode, projectId, appId, userId, criteria);
        return ResultHelper.getContent(result);
    }
    /**
     * 查询物理世界对象关系
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param criteria: 请求参数
     * @return 原样查询结果
     */
    public static CommonResult<List<ObjectRelation>> queryPrototype(String groupCode, String projectId, String appId,
                                             String userId, QueryCriteria criteria) {
        return client.query(groupCode, projectId, appId, userId, criteria);
    }
    /**
     * 新增物理世界对象关系-单个新增
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param node: 新增对象关系
     * @return 对象关系
     */
    public static ObjectRelation createOne(String groupCode, String projectId, String appId,
                                           String userId, ObjectNode node) {
        CommonResult<ObjectRelation> result = client.createOne(groupCode, projectId, appId, userId, node);
        return ResultHelper.getContent(result);
    }
    /**
     * 新增物理世界对象关系-批量新增
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param nodes: 新增对象关系集合
     * @return 对象关系数组
     */
    public static List<ObjectRelation> create(String groupCode, String projectId, String appId,
                                              String userId, List<ObjectNode> nodes) {
        CommonResult<List<ObjectRelation>> result = client.create(groupCode, projectId, appId, userId, nodes);
        return ResultHelper.getContent(result);
    }
    /**
     * 更新物理世界对象关系-单个更新
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param node: 更新对象关系
     * @return 对象关系
     */
    public static ObjectRelation updateOne(String groupCode, String projectId, String appId,
                                           String userId, ObjectNode node) {
        CommonResult<ObjectRelation> result = client.updateOne(groupCode, projectId, appId, userId, node);
        return ResultHelper.getContent(result);
    }
    /**
     * 更新物理世界对象关系-批量更新
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param nodes: 更新对象关系集合
     * @return 对象关系数组
     */
    public static List<ObjectRelation> update(String groupCode, String projectId, String appId,
                                              String userId, List<ObjectNode> nodes) {
        CommonResult<List<ObjectRelation>> result = client.update(groupCode, projectId, appId, userId, nodes);
        return ResultHelper.getContent(result);
    }
    /**
     * 删除物理世界对象关系-单个删除
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param id: 对象关系id
     * @return 对象关系
     */
    public static void deleteOne(String groupCode, String projectId, String appId,
                                                             String userId, String id) {
        client.deleteOne(groupCode, projectId, appId, userId, id);
    }
    /**
     * 删除物理世界对象关系-批量删除
     * @param groupCode: 集团编码
     * @param projectId: 项目ID
     * @param appId: 应用ID
     * @param userId: 用户ID
     * @param ids: 对象关系id数组
     * @return 对象关系数组
     */
    public static void delete(String groupCode, String projectId, String appId,
                                                             String userId, List<String> ids) {
        client.delete(groupCode, projectId, appId, userId, ids);
    }
}
