package com.njcn.device.api;

import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.api.fallback.GeneralDeviceInfoClientFallbackFactory;
import com.njcn.device.pojo.bo.BaseLineInfo;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author hongawen
 * @version 1.0.0
 * @date 2022年02月14日 14:02
 */
@FeignClient(value = ServerInfo.DEVICE, path = "/deviceInfo", fallbackFactory = GeneralDeviceInfoClientFallbackFactory.class)
public interface GeneralDeviceInfoClient {


    /**
     * 获取按部门分类的实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际运行终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取按部门分类的实际便携式终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际便携式终端综合信息
     */
    @PostMapping("/getOfflineRunDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getOfflineRunDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取按部门分类的实际所有终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalAllDeviceInfoAsDept")
    HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsDept(@RequestBody DeviceInfoParam deviceInfoParam);

    /**
     * 获取变电站分类的实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfoAsSubstation")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfoAsSubstation(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际运行终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际运行终端综合信息
     */
    @PostMapping("/getPracticalRunDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际便携式终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际便携式终端综合信息
     */
    @PostMapping("/getOfflineRunDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getOfflineRunDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);


    /**
     * 获取实际所有终端综合信息
     *
     * @param deviceInfoParam 查询终端条件
     * @return 按部门分类的实际所有终端综合信息
     */
    @PostMapping("/getPracticalAllDeviceInfo")
    HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfo(@RequestBody DeviceInfoParam deviceInfoParam);

    /**
     * 获取监测点及以上层的基础信息
     */
    @PostMapping("/getBaseLineInfo")
    HttpResult<List<BaseLineInfo>> getBaseLineInfo(@RequestBody List<String> lineIndex);

}
