package com.usky.demo;


import com.usky.common.core.bean.ApiResult;
import com.usky.demo.domain.*;
import com.usky.demo.factory.RemoteTsdbProxyFallbackFactory;
import com.usky.demo.feign.RemoteTsdbProxyFeignConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

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

@FeignClient(
        contextId = "remoteTsdbProxyService",
        value = "service-tsdb",
        fallbackFactory = RemoteTsdbProxyFallbackFactory.class,
        configuration = RemoteTsdbProxyFeignConfiguration.class)
public interface RemoteTsdbProxyService {

//    /**
//     * 设备实时数据查询
//     */
//    @PostMapping("/last")
//    List<LastInnerResultVO> last(@RequestBody LastInnerQueryVO requestVO);

    /**
     * 查询influxdb所有表实时数据
     * @return
     */
    @PostMapping("getAllDeviceRealTime")
    ApiResult<List<Map<String, Object>>> getAllDeviceRealTime();

//    /**
//     * 单个设备实时数据查询
//     * @param deviceUUId
//     * @return
//     */
//    @GetMapping("/last")
//    LastResultVO queryLastDeviceData(@RequestParam(value = "deviceUUId") String deviceUUId);

    /**
     * 批量设备实时数据查询
     * @param requestVO
     * @return
     */
    @PostMapping("/externalLast")
    ApiResult<List<LastInnerResultVO>> queryLastDeviceData(@RequestBody LastInnerQueryVO requestVO);

//    /**
//     * 单个设备历史数据查询
//     * @param deviceUUId
//     * @param startTime
//     * @param endTime
//     * @return
//     */
//    @GetMapping("/history")
//    HistoryResultVO queryHistoryDeviceData(@RequestParam(value = "deviceUUId") String deviceUUId,
//                                                             @RequestParam(value = "startTime") String startTime,
//                                                             @RequestParam(value = "endTime") String endTime);

    /**
     * 批量设备历史数据查询
     * @param requestVO
     * @return
     */
    @PostMapping("/history")
    ApiResult<List<HistorysInnerResultVO>> queryHistoryDeviceData(@RequestBody HistorysInnerRequestVO requestVO);


    /**
     * 创建超级表和列
     * @param superTableDTO 超级表信息
     * @return
     */
    @PostMapping("/createSuperTableAndColumn")
    Void createSuperTableAndColumn(@RequestBody SuperTableDTO superTableDTO);

    /**
     * 超级表新增字段
     *
     * @param superTableDTO 数据信息
     * @return 执行结果
     */
    @PostMapping("/addSuperTableColumn")
    Void addSuperTableColumn(@RequestBody SuperTableDTO superTableDTO) ;

    /**
     * 超级表删除字段
     *
     * @param superTableDTO 数据信息
     * @return 执行结果
     */
    @PostMapping("/dropSuperTableColumn")
    Void dropSuperTableColumn(@RequestBody SuperTableDTO superTableDTO);

    /**
     * 能耗分项汇总（TDengine 超级表 LAST-FIRST 按设备聚合后求和）
     */
    @PostMapping("/energyItemSum")
    EnergyItemSumResultVO sumEnergyItem(@RequestBody EnergyItemSumQueryVO requestVO);

    /**
     * 能耗分项趋势（按产品+时间范围返回 time/value 序列）
     */
    @PostMapping("/energyItemTrend")
    EnergyItemTrendResultVO sumEnergyItemTrend(@RequestBody EnergyItemTrendQueryVO requestVO);

    /**
     * 解析 CSV 并导入设备时序数据：INSERT INTO _{deviceUuid} (ts, p) VALUES ...
     */
    @PostMapping(value = "/importDeviceCsv", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    ApiResult<DeviceCsvImportResultVO> importDeviceCsv(@RequestPart("deviceUuid") String deviceUuid,
                                                       @RequestPart("file") MultipartFile file);
}
