package com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.http.xlw.feign;

import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.http.xlw.dto.*;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.common.result.XlwResultData;
import com.cico.nest.lcdp.boot.core.qxsd.infrastructure.gatewayimpl.ws.xlw.dto.XlwRealTimeVehicleDTO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

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

/**
 * 信路威http接口
 * @author zws
 * @date 2024/8/7
 */
public interface XlwClientFeign {

    /**
     * 登录接口
     * 1.6 /common/login.htm 老
     * 1.3 /backDoor/getDemoSessionId.htm 新
     * @param loginDTO 请求参数
     * @return result
     */
    @PostMapping("/backDoor/getDemoSessionId.htm")
    XlwResultData<Map<String,Object>> login(@RequestBody XlwLoginDTO loginDTO);

    /**
     * 当前交通参数统计信息数据接口
     * @param tunnelId 隧道id
     * @return 指标数据
     */
    @PostMapping("/trafficStatistic/latestTrafficParameter.htm")
    XlwResultData<XlwTrafficFlowMetricDTO> getTrafficFlowMetric(@RequestBody XlwTunnelIdDTO tunnelId);

    /**
     * 隧道内断面拥堵情况
     * @param tunnelId 隧道id
     * @return 拥堵情况
     */
    @PostMapping("/traffic/situation.htm")
    XlwResultData<XlwSectionCongestionStatusDTO> sectionCongestionStatus(@RequestBody XlwTunnelIdDTO tunnelId);

    /**
     * 根据事件id获取事件图片
     * @param eventIdDTO 事件id
     * @return 图片信息
     */
    @PostMapping("/eventLog/image.htm")
    XlwResultData<List<XlwEventImageDTO>> getEventImageById(@RequestBody XlwEventIdDTO eventIdDTO);

    /**
     * 查询事件列表接口
     * @param eventListSearchDTO 查询条件
     * @return 事件列表
     */
    @PostMapping("/eventLog/page.htm")
    XlwResultData<XlwPageDTO<XlwEventListDTO>> allEventList(@RequestBody XlwEventListSearchDTO eventListSearchDTO);

    /**
     * 获取事件全息回放数据
     * @param eventIdDTO 事件id
     * @return 全息回放数据
     */
    @PostMapping("/eventLog/holographicTimeHistory.htm")
    XlwResultData<List<XlwHolographicTimeHistoryDTO>> getHolographicTimeHistory(@RequestBody XlwEventIdDTO eventIdDTO);

    /**
     * 获取隧道列表数据
     * @return 列表数据
     */
    @PostMapping("/tunnel/list.htm")
    XlwResultData<List<XlwTunnelListDTO>> getTunnelList();

    /**
     * 获取抓拍流水
     * @param searchDTO 查询条件
     * @return 返回数据
     */
    @PostMapping("/gatewayRecord/page.htm")
    XlwResultData<XlwPageDTO<XlwBayonetPictureDTO>> getBayonetPicture(@RequestBody XlwBayonetPictureSearchDTO searchDTO);

    /**
     * 获得设备列表信息
     * @param organizationId 组织id
     * @return 返回数据
     */
    @PostMapping("/device/list.htm")
    XlwResultData<List<XlwDeviceInfoDTO>> deviceInfo(@RequestBody XlwOrganizationId organizationId);

    /**
     * 5.1 获取车辆通行记录
     * @param searchDTO 查询条件
     * @return 车辆数据
     */
    @PostMapping("/passingProfile/page.htm")
    XlwResultData<XlwPageDTO<XlwPassingProfileDTO>> getPassingProfile(@RequestBody XlwPassingProfileSearchDTO searchDTO);

    /**
     * 获取通行记录车辆轨迹图片数据
     * @param passProfileIdDTO 轨迹id
     * @return 图片数据
     */
    @PostMapping("/passingProfile/image.htm")
    XlwResultData<List<XlwPassProfileImageDTO>> getPassProfileImage(@RequestBody XlwPassProfileIdDTO passProfileIdDTO);

    /**
     * 获取通行记录轨迹数据
     * @param locusDataSearchDTO 通行数据查询
     * @return 车辆轨迹数据
     */
    @PostMapping("/eventLog/queryHistoryFrameList.htm")
    XlwResultData<List<XlwHolographicTimeHistoryDTO>> getCarLocusData(@RequestBody XlwLocusDataSearchDTO locusDataSearchDTO);


    /**
     * 获取通行记录车辆轨迹图片数据
     * @param passProfileIdListDTO 轨迹ids
     * @return 图片数据
     */
    @PostMapping("/passingProfile/imageList.htm")
    XlwResultData<List<Map<String,Object>>> getPassProfileImage(@RequestBody Map<String,List<String>> passProfileIdListDTO);

    /**
     * 获取车型流量数据接口（日报）
     * @param tableStatsDTO 查询条件
     * @return 返回数据
     */
    @PostMapping("/carflowCartype/pageDay.htm")
    XlwResultData<List<Map<String,Object>>> carFlowPageDay(@RequestBody XlwTableStatsDTO tableStatsDTO);

    /**
     * 获取车型流量数据接口（时报）
     * @param tableStatsDTO
     * @return
     */
    @PostMapping("/carflowCartype/pageHour.htm")
    XlwResultData<List<Map<String,Object>>> carFlowPageHour(@RequestBody XlwTableStatsDTO tableStatsDTO);

    /**
     * 获取隧道车辆时速统计数据接口
     * @param tableStatsDTO
     * @return
     */
    @PostMapping("/trafficStatistic/speedTrend.htm")
    XlwResultData<List<Map<String,Object>>> speedTrend(@RequestBody XlwTableStatsDTO tableStatsDTO);

    /**
     * 临时轨迹详情查询
     * @param remainDetailDTO
     * @return 目前这个接口只取了入口时间，如果以后取别的返回值需要边下
     */
    @PostMapping("/passManager/remain/detail.htm")
    XlwResultData<XlwPassingProfileDTO> getRemainDetail(@RequestBody XlwRemainDetailDTO remainDetailDTO);
}
