
package com.cmvr.inspection.service;

import java.util.List;

import cmvr.msgs.Agv;
import com.baomidou.mybatisplus.spring.service.IService;
import com.cmvr.inspection.domain.InspectionRobot;
import com.cmvr.inspection.domain.vo.InspectionRobotVo;

/**
 * 巡检机器人Service接口
 *
 * @author cmvr-iot
 * @since 2026-05-29
 */
public interface IInspectionRobotService extends IService<InspectionRobot>
{
    /**
     * 查询巡检机器人
     *
     * @param id 巡检机器人主键
     * @return 巡检机器人
     */
    InspectionRobot selectInspectionRobotById(String id);

    /**
     * 查询巡检机器人列表
     *
     * @param inspectionRobot 巡检机器人
     * @return 巡检机器人集合
     */
    List<InspectionRobotVo> selectInspectionRobotList(InspectionRobot inspectionRobot);

    /**
     * 新增巡检机器人
     *
     * @param inspectionRobot 巡检机器人
     * @return 结果
     */
    int insertInspectionRobot(InspectionRobot inspectionRobot);

    /**
     * 修改巡检机器人
     *
     * @param inspectionRobot 巡检机器人
     * @return 结果
     */
    int updateInspectionRobot(InspectionRobot inspectionRobot);

    /**
     * 批量删除巡检机器人
     *
     * @param ids 需要删除的巡检机器人主键集合
     * @return 结果
     */
    int deleteInspectionRobotByIds(String[] ids);

    /**
     * 获取机器人地图列表（从AGV获取）
     *
     * @param robotId 机器人ID
     * @return 地图列表
     */
    List<String> getRobotMapList(String robotId);

    /**
     * 绑定机器人地图
     *
     * @param robotId 机器人ID
     * @param mapId 地图ID
     * @return 结果
     */
    int bindRobotMap(String robotId, String mapId);

    /**
     * 从机器人下载地图
     *
     * @param robotId 机器人ID
     * @param mapName 地图名称
     * @return 地图内容
     */
    String downloadMapFromRobot(String robotId, String mapName);

    /**
     * 上传地图（从源机器人下载到目标机器人）
     *
     * @param robotId 目标机器人ID
     * @return 结果
     */
    String uploadMapFromSource(String robotId);

    /**
     * 同步机器人状态（电量、位置等）
     *
     * @param robotId 机器人ID
     * @return 更新后的机器人信息
     */
    InspectionRobot syncRobotStatus(String robotId);

    /**
     * 获取机器人实时位置
     *
     * @param robotId 机器人ID
     * @return 机器人位置信息
     */
    Agv.AgvPose2d getRobotRealtimeLocation(String robotId);

    /**
     * 导航到指定位置（坐标）
     *
     * @param robotId 机器人ID
     * @param x X坐标（米）
     * @param y Y坐标（米）
     * @param theta 朝向角（弧度）
     */
    void navigateToPosition(String robotId, Double x, Double y, Double theta);

    /**
     * 开始建图
     *
     * @param robotId 机器人ID
     * @param dimension 建图维度（0:未指定 1:2D 2:3D 3:2D+3D）
     * @param mapName 地图名称（可选）
     * @param realTime 是否实时建图
     * @return 会话ID
     */
    String startMapping(String robotId, int dimension, String mapName, boolean realTime);

    /**
     * 停止建图
     *
     * @param robotId 机器人ID
     */
    void stopMapping(String robotId);

}