package com.sckw.transport.model.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sckw.transport.model.param.GoodsUnitParam;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Digits;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author lfdc
 * @desc LogisticsConsignmentDto-V4.2
 * @date 2023-07-06 14:07:50
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LogisticsConsignmentDto implements Serializable {

    /**
     * 单据类型采购订单1，销售订单2
     */
    @NotBlank(message = "单据类型不能为空")
    private String type;

    /**
     * 贸易订单id
     */
    @NotBlank(message = "贸易订单id不能为空")
    @com.fasterxml.jackson.annotation.JsonProperty("tOrderId")
    private String tOrderId;

    /**
     * 贸易订单编号
     */
    @NotBlank(message = "贸易订单编号不能为空")
    @JsonProperty("tOrderNo")
    private String tOrderNo;

    /**
     * 托运单位
     */
    @NotNull(message = "托运单位名称不能为空")
    private String checkCompany;
    /**
     * 托运单位id
     */
    @NotNull(message = "托运单位id不能为空")
    private String checkCompanyId;

    /**
     * 联系电话
     */
    @NotNull(message = "托运联系电话不能为空")
    private String checkContactPhone;
    /**
     * 联系人
     */
    @NotNull(message = "托运联系人不能为空")
    private String checkContacts;
    /**
     * 托运联系人id
     */
    @NotNull(message = "托运联系人不能为空")
    private String checkContactsId;

    /**
     * 承运单位
     */
    @NotBlank(message = "承运单位不能为空")
    private String consignCompany;

    /**
     * 承运单位ID
     */
    @NotBlank(message = "承运单位ID不能为空")
    private String consignCompanyId;

    /**
     * 联系电话
     */
    @NotNull(message = "承运联系电话不能为空")
    private String consignContactPhone;
    /**
     * 联系人
     */
    @NotNull(message = "承运联系人不能为空")
    private String consignContacts;

    /**
     * 承运联系人id
     */
    @NotNull(message = "承运联系人id不能为空")
    private String consignContactsId;

    /**
     * 商品ID
     */
    @NotNull(message = "商品id不能为空")
    private Long goodsId;

    /**
     * 商品类型
     */
    private String goodsType;

    /**
     * goodsName
     */
    private String goodsName;

    /**
     * skuId
     */
    private String skuId;

    /**
     * 结算周期
     */
    @NotBlank(message = "结算周期不能为空")
    private String settlementCycle;

    /**
     * 税率
     */
    private BigDecimal taxRate;

    /**
     * 付款方式
     */
    @NotBlank(message = "付款方式不能为空")
    private String payment;

    /**
     * 分配单位
     */
    @NotBlank(message = "分配单位不能为空")
    private String carryingCapacityUnit;

    /**
     * 扣亏损值
     */
    private BigDecimal goodsPrice;

    /**
     * 扣亏损值单位
     */
    //@NotBlank(message = "扣亏损值单位不能为空")
    private String goodsPriceUnit;

    /**
     * 合理损耗
     */
    private BigDecimal loss;

    /**
     * 合理损耗单位
     */
    @NotBlank(message = "合理损耗单位不能为空")
    private String lossUnit;

    /**
     * 计费方式
     */
    @NotBlank(message = "计费方式不能为空")
    private String billingMode;

    /**
     * 是否全量
     */
    private Boolean isFullDose;

    /**
     * 运价
     */
    @Digits(integer = 10, fraction = 2, message = "运价格式不正确")
    @DecimalMin(value = "0.00", message = "运价不能小于{value}")
    private BigDecimal price;

    /**
     * 运价方式
     */
    @NotBlank(message = "运价方式不能为空")
    private String priceType;

    /**
     * 订单总量
     */
    @Digits(integer = 10, fraction = 2, message = "订单总量格式不正确")
    @DecimalMin(value = "0.00", message = "订单总量不能小于{value}")
    private BigDecimal carryingCapacity;

    /**
     * 开始时间
     */
    @NotNull(message = "开始时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 结束日期（yyyy-MM-dd）
     */
    @NotNull(message = "结束时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    /**
     * 备注信息
     */
    private String remark;


    /**
     * 合同信息
     */
    @NotNull(message = "合同信息不能为空")
    //private List<ContractDto> contractInfo;
    private Long contractId;

    /**
     * 地址信息
     */
    @NotNull(message = "地址信息不能为空")
    @JsonProperty("addressInfo")
    private List<AddressInfoDto> addressInfo;

    /**
     * 辅助单位
     */
    @JsonProperty("assistUnit")
    private List<GoodsUnitParam> assistUnit;

    /**
     * 线路分配
     */
    @JsonProperty("lineFreightList")
    private List<LineFreightDto> lineFreightList;

}
