package com.persagy.proxy.calculation.service.impl;

import com.persagy.dmp.basic.dto.RequestData;
import com.persagy.dmp.common.constant.CommonConstant;
import com.persagy.dmp.digital.client.DigitalRelationCaclFacade;
import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
import com.persagy.proxy.adm.request.AdmResponse;
import com.persagy.proxy.calculation.service.AdmCalcSpecialService;
import com.persagy.proxy.common.entity.InstanceUrlParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/***
 * Description: 官网关系计算逻辑类
 * @author : lijie
 * @date :2021/9/29 11:09
 * Update By lijie 2021/9/29 11:09
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class AdmCalcSpecialServiceImpl implements AdmCalcSpecialService {
    /***
     * Description: 管网系统设备分块  +  计算流向
     * @param context : 基本请求参数
     * @param admRelationTypeEnum : 关系类型枚举对象
     * @return : com.persagy.proxy.adm.request.AdmResponse
     * @author : lijie
     * @date :2021/9/29 11:12
     * Update By lijie 2021/9/29 11:12
     */
    @Override
    public AdmResponse sysBlock(InstanceUrlParam context, AdmRelationTypeEnum admRelationTypeEnum) {
        RequestData requestData = RequestData.builder()
                .graphCode(admRelationTypeEnum.getGraphCode())
                .relCode(admRelationTypeEnum.getRelCode())
                .calBeforeRelFlag(true)
                .build();
        // 调用中台的计算逻辑
        DigitalRelationCaclFacade.calculatingObjRelationPrototype(context.getGroupCode(),context.getProjectId(),
                context.getAppId(), CommonConstant.DEFAULT_ID, requestData);
        return AdmResponse.success();
    }
    /***
     * Description: 管网计算
     * @param context : 基本请求参数
     * @return : com.persagy.proxy.adm.request.AdmResponse
     * @author : lijie
     * date :2021/9/29 11:58
     * Update By lijie 2021/9/29 11:58
     */
    @Override
    public AdmResponse calcNetworks(InstanceUrlParam context) {
        // 1.根据项目id查询项目下的所有建筑
        // 2.遍历建筑列表
        // 2.1 根据建筑id查询建筑下所有楼层
        // 2.2 获得所有楼层的modelId
        // 2.3 根据楼层的modelId查询所有modelId当前对应的模型id(currentModelId)
        // 2.4 风管立管连接
        // 2.4.1 根据modelId查询所有管道类型大于0的管道
        // 2.4.2 根据modelId对查询结果进行分组形成一个二维数组
        // 2.4.3 循环二维数组
        // 2.4.3.1 从二维数组中筛选出管道类型为2或3的管道:低楼层管道
        // 2.4.3.2 从二维数组中筛选出管道类型为1或3的管道:高楼层管道
        // 2.4.3.3 遍历低楼层管道获得{低楼层管道id:[高楼层管道id,高楼层管道id]}
        // 2.4.3.3.1 获取低楼层管道的直线范围:管道直径>0:管道直径>>1:min(管道宽度,管道高度)>>1
        // 2.4.3.3.2 获取低楼层管道的x,y坐标:location.points.get(0)
        // 2.4.3.3.3 获取高楼层管道的x,y坐标:location.points.get(0)
        // 2.4.3.3.4 mepSystemType(管道系统类型名称)相等且高楼层管道x,y不为空
        // 2.4.3.3.5 低楼层x,y与高楼层的x,y的勾股和小于直线范围则符合


        return AdmResponse.success();
    }
}
