package cn.iocoder.yudao.module.mqtt.api.path.task;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 发送任务给PP
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaskToPathPlanningDTO {

    @Schema(description = "robot_task_detail/robot_charge_log 的 id")
    private String orderId;

    @Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)")
    private String orderType;

    //线库: LINE + 线库号
    //普通库位: POINT + 点位号
    @Schema(description = "取货的组编号")
    private String takeGroupId;

    @Schema(description = "取货任务, 组序号, 越大越先执行")
    private Long takeLocationNumber;

    @Schema(description = "取货任务的终点id")
    private String takePointId;

    //线库: LINE + 线库号
    //普通库位: POINT + 点位号
    @Schema(description = "放货的组编号(可能为空)")
    private String releaseGroupId;

    @Schema(description = "放货任务, 组序号, 越大越先执行(可能为空)")
    private Long releaseLocationNumber;

    @Schema(description = "放货任务的终点id")
    private String releasePointId;

    @Schema(description = "优先级(不同的组编号时:越大越先执行, 相同组编号时:组序号越大的越先执行)")
    private Long priority;

    @Schema(description = "能执行此任务的机器人编号， 和机器人不能行走的区域")
    private List<TaskRobotNoLimittationAreaDTO> robotNoLimitationAreaDTOS;

    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    @Schema(description = "取货高度")
    private Double takeHeight;

    @Schema(description = "取货货叉高度")
    private Double detectHeight;

    @Schema(description = "放货高度")
    private Double releaseHeight;

    @Schema(description = "等待点")
    private List<String> waitIds;

    @Schema(description = "取的层数")
    private Integer takeLevel;

    @Schema(description = "放的层数")
    private Integer releaseLevel;

    @Schema(description = "取货-叉起货需要在原来高度基础上偏移的高度")
    private Double takeOffsetHeight;

    @Schema(description = "取货-叉起货需要在原来高度基础上偏移的高度")
    private Double releaseOffsetHeight;

    //PICK_UP_GOODS取货、DROP_OFF_GOODS放货、MOVE移动、AUTO_CHARGE自动充电、MANUAL_CHARGE手动充电
    //如果是取放货 传PICK_UP_GOODS
    private String taskType;

}
