package cn.iocoder.yudao.module.remote.service.robot;

import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotDistanceInformationDTO;
import cn.iocoder.yudao.module.remote.api.path.dto.RemoteRobotWirelessSignalDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.PositionMapRespDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotChangeModeDTO;
import cn.iocoder.yudao.module.remote.controller.admin.robot.dto.RemoteRobotTaskDoneDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotStatusDTO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface RemoteRobotService {
    /**
     * 获取地图区域对应的机器人信息
     * @param positionMapRespDTO
     * @return
     */
    List<RemoteRobotDTO> remoteGetAreaRobot(PositionMapRespDTO positionMapRespDTO);

    /**
     * 键急停or一键恢复地图上所有AGV
     * @param id
     * @param type
     */
    void remoteEmergencyStopOrRecovery(Long id, Integer type);

    /**
     * 获取机器人远遥模式/急停/协控状态
     * @param request
     * @return
     */
    RemoteRobotStatusDTO getRemoteRobotStatus(HttpServletRequest request);

    /**
     * 暂停车辆
     * @param robotNo
     * @return
     */
    void robotStop(String robotNo);

    /**
     * 恢复车辆
     * @param robotNo
     */
    void recovery(String robotNo);

    /**
     * 切换远遥模式
     * @param data
     * @return
     */
    void robotChangeMode( RemoteRobotChangeModeDTO data,HttpServletRequest request);

    /**
     * 查询地图
     * @return
     */
    Object getPositionMapList();

    /**
     * 断开连接
     * @param request
     */
    void remoteDisconnect(HttpServletRequest request);

    /**
     * 任务完成/取货完成
     * @param remoteRobotTaskDoneDTO
     * @param request
     */
    void remoteTaskDone( RemoteRobotTaskDoneDTO remoteRobotTaskDoneDTO, HttpServletRequest request);

    /**
     * 推送导航信息给前端
     * @param data
     */
    void remoteDistanceInformation(RemoteRobotDistanceInformationDTO data);

    /**
     * 上报车辆信号信息
     * @param data
     */
    void sendRobotWirelessSignalStatus(RemoteRobotWirelessSignalDTO data);
}
