package com.aiotagro.cattletrade.business.dto;

import lombok.Data;
import javax.validation.constraints.*;
import java.util.Date;
import java.util.List;

/**
 * 运送清单创建DTO
 * 
 * @author System
 * @date 2025-10-11
 */
@Data
public class DeliveryCreateDto {
    
    /**
     * 发货方
     */
    @NotBlank(message = "发货方不能为空")
    private String shipper;
    
    /**
     * 采购方
     */
    @NotBlank(message = "采购方不能为空")
    private String buyer;
    
    /**
     * 车牌号
     */
    @NotBlank(message = "车牌号不能为空")
    @Pattern(regexp = "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-Z0-9]{5}[A-Z0-9挂学警港澳]$", 
             message = "车牌号格式不正确")
    private String plateNumber;
    
    /**
     * 司机姓名
     */
    @NotBlank(message = "司机姓名不能为空")
    private String driverName;
    
    /**
     * 司机电话
     */
    @NotBlank(message = "司机电话不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String driverPhone;
    
    /**
     * 主机设备ID
     */
    private Integer serverId;
    
    /**
     * 耳标设备ID列表
     */
    private List<Integer> eartagIds;
    
    /**
     * 项圈设备ID列表
     */
    private List<Integer> collarIds;
    
    /**
     * 预计出发时间
     */
    @NotNull(message = "预计出发时间不能为空")
    private Date estimatedDepartureTime;
    
    /**
     * 预计到达时间
     */
    @NotNull(message = "预计到达时间不能为空")
    private Date estimatedArrivalTime;
    
    /**
     * 起点地址
     */
    @NotBlank(message = "起点地址不能为空")
    private String startLocation;
    
    /**
     * 目的地地址
     */
    @NotBlank(message = "目的地地址不能为空")
    private String endLocation;
    
    /**
     * 牛只数量
     */
    @NotNull(message = "牛只数量不能为空")
    @Min(value = 1, message = "牛只数量至少为1")
    private Integer cattleCount;
    
    /**
     * 预估重量（公斤）
     */
    @NotNull(message = "预估重量不能为空")
    @DecimalMin(value = "0.01", message = "预估重量必须大于0")
    private Double estimatedWeight;
    
    /**
     * 检疫证号
     */
    private String quarantineCertNo;
    
    /**
     * 备注
     */
    @Size(max = 500, message = "备注不能超过500字")
    private String remark;
}

