package com.artfess.rescue.open.manager;


import com.artfess.base.model.CommonResult;
import com.artfess.base.query.PageList;
import com.artfess.rescue.base.model.BizBaseCar;
import com.artfess.rescue.base.model.BizBaseTeam;
import com.artfess.rescue.event.model.BizEventInfo;
import com.artfess.rescue.open.dto.BaseQueryDTO;
import com.artfess.rescue.open.dto.CameraInfoDTO;
import com.artfess.rescue.open.dto.OpenBaseQueryDTO;
import com.artfess.rescue.open.vo.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author: wsf
 * @Description: 巡查救援-驾驶舱相关接口
 * @DateTime: 2024/10/29 10:59
 **/
public interface OpenCountManager {
    /**
     * 巡查基本概览
     *
     * @param dto 驾驶舱查询条件DTO
     * @return PatrolInfoVO
     */
    CommonResult<PatrolInfoVO> getPatrolInfo(OpenBaseQueryDTO dto);

    /**
     * 当日巡查情况
     *
     * @param dto 驾驶舱查询条件DTO
     * @return PatrolCountVO
     */
    CommonResult<PatrolCountVO> getPatrolCount(OpenBaseQueryDTO dto);

    /**
     * 当日事件、救援情况
     *
     * @param dto 驾驶舱查询条件DTO
     * @return TaskCountVO
     */
    CommonResult<TaskCountVO> getTaskCount(OpenBaseQueryDTO dto);



    /**
     * 事件类型
     *
     * @param dto 驾驶舱查询条件DTO
     * @return List<EventTypeVO>
     */
    CommonResult<List<EventTypeVO>> getTaskTypeCount(OpenBaseQueryDTO dto);

    /**
     * 获取巡查车辆
     *
     * @param dto 驾驶舱查询条件DTO
     * @return List<BizBaseCar>
     */
    List<BizBaseCar> getBaseCars(OpenBaseQueryDTO dto, Integer useType);

    /**
     * 查询队伍基础信息列表
     *
     * @param dto 驾驶舱查询条件DTO
     * @return List<BizBaseTeam>
     */
    List<BizBaseTeam> getBaseTeams(OpenBaseQueryDTO dto);

    /**
     * 查询事件
     *
     * @param roadIds   路段ID集合
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return List<BizEventInfo>
     */
    List<BizEventInfo> getEventInfos(List<String> roadIds, LocalDateTime startTime, LocalDateTime endTime,List<Integer> statusList);

    /**
     * 根据经纬度获取周边摄像头信息
     *
     * @param lng 经度
     * @param lat 纬度
     * @return List<CameraInfoDTO>摄像头信息列表
     */
    List<CameraInfoDTO> cameraInfos(String lng, String lat);

    /**
     * 根据桩号、路段查询查询周边摄像头
     * @param vo 周边摄像头查询VO对象
     * @return 返回周边摄像头信息集合
     */
    List<CameraInfoDTO> querySurroundingCameraInfo(SurroundingCameraInfoQueryVO vo);

    /**
     * 通用查询
     *
     * @param dto 驾驶舱查询条件DTO
     * @return TaskCountVO
     */
    PageList<?> getCommonInfo(BaseQueryDTO dto);
}
