package com.iailab.module.data.api.point;

import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.api.point.dto.*;
import com.iailab.module.data.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月19日
 */
@FeignClient(name = ApiConstants.NAME)
@Tag(name = "测点接口")
public interface DataPointApi {

    String PREFIX = ApiConstants.PREFIX + "/point";

    @GetMapping(PREFIX + "/info/no/{pointNo}")
    @Operation(summary = "根据测点编号查询测点信息")
    ApiPointDTO getInfoByNo(@PathVariable("pointNo") String pointNo);

    @GetMapping(PREFIX + "/info/id/{pointId}")
    @Operation(summary = "根据测点ID查询测点信息")
    ApiPointDTO getInfoById(@PathVariable("pointId") String pointId);

    @PostMapping(PREFIX + "/info/ids")
    @Operation(summary = "根据多个测点ID查询测点信息")
    List<ApiPointDTO> getInfoByIds(@RequestParam("pointNos") Set<String> pointIds);

    @PostMapping(PREFIX + "/query-points/real-value")
    @Operation(summary = "查询多个测点当前值")
    Map<String, Object> queryPointsRealValue(@RequestParam("pointNos") List<String> pointNos);

    @PostMapping(PREFIX + "/query-points/history-value")
    @Operation(summary = "查询多个测点历史值")
    Map<String, List<Map<String, Object>>> queryPointsHistoryValue(@RequestBody ApiPointsValueQueryDTO queryDto);

    @PostMapping(PREFIX + "/query-point/history-value")
    @Operation(summary = "查询单个测点历史值")
    List<ApiPointValueDTO> queryPointHistoryValue(@RequestBody ApiPointValueQueryDTO queryDto);

    @PutMapping(PREFIX + "/write-point/real-value")
    @Operation(summary = "写入单个测点值")
    Boolean writePointRealValue(@RequestBody ApiPointValueWriteDTO queryDto);

    @PostMapping(PREFIX + "/query-math-point/current-value")
    @Operation(summary = "根据计算点编号查询测点集合")
    PageResult<ApiPointDTO> queryMathPointCurrentValue(@RequestBody ApiPointPageReqVO reqVO);
}