package com.sckw.transport.model.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.*;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * @author lfdc
 * @description 承运订单/托运订单-新建订单
 * @date 2023-07-31 10:07:23
 */
@Data
public class AddOrderDTO {

    /**
     * 托运单位
     */
    @NotBlank(message = "托运单位名称不能为空")
    private String consignCompany;
    /**
     * 托运单位id
     */
    @NotBlank(message = "托运单位id不能为空")
    private String consignCompanyId;

    /**
     * 托运联系电话
     */
    @NotBlank(message = "托运联系电话不能为空")
    private String consignContactPhone;

    /**
     * 托运联系人
     */
    @NotBlank(message = "托运联系人不能为空")
    private String consignContacts;

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

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

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

    /**
     * 承运联系电话
     */
    @NotBlank(message = "承运联系电话不能为空")
    private String acceptContactPhone;


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

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

    /**
     * 货物名称
     */
    @NotNull(message = "货物名称不能为空")
    private String goodsName;

    /**
     * 货物类型
     */
    @NotBlank(message = "货物类型不能为空")
    private String goodsType;

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

    /**
     * 计费方式类型
     */
    @NotNull(message = "计费方式类型不能为空")
    private String billingModeType;

    /**
     * 运价
     */
    @NotNull(message = "运价不能为空")
    @Digits(integer = 10, fraction = 2, message = "装货量格式错误")
    @DecimalMin(value = "0.00", message = "运价最小为{value}")
    private BigDecimal price;

    /**
     * 运价方式
     */
    @NotNull(message = "运价方式不能为空")
    @Min(value = 0, message = "必须大于等于{value}")
    @Max(value = 10, message = "必须小于等于{value}")
    private Long priceType;

    /**
     * 税率
     */
//    @NotNull(message = "税率不能为空")
//    @Digits(integer = 10,fraction = 2,message = "税率格式错误")
//    @DecimalMin(value = "0.00",message = "税率最小为{value}")
    private BigDecimal taxRate;

    /**
     * 税率单位
     */
    @NotNull(message = "税率单位不能为空")
    private String taxRateUnit;

    /**
     * 总量
     */
    @NotNull(message = "总量不能为空")
    @Digits(integer = 10, fraction = 2, message = "总量格式错误")
    @DecimalMin(value = "0.00", message = "总量最小值为{value}")
    private BigDecimal amount;

    /**
     * 总量单位
     */
    @NotBlank(message = "总量单位不能为空")
    private String amountUnit;

    /**
     * 合理损耗
     */
    @Digits(integer = 5, fraction = 2, message = "合理损耗格式错误")
    @DecimalMin(value = "0.00", message = "合理损耗最小值为{value}")
    private BigDecimal loss;

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

    /**
     * 商品价值（扣亏货值）
     */
    @Digits(integer = 5, fraction = 2, message = "扣亏货值格式错误")
    @DecimalMin(value = "0.00", message = "扣亏货值最小值为{value}")
    private BigDecimal goodsPrice;
    /**
     * 商品价值（扣亏货值）单位
     */
    @NotBlank(message = "扣亏货值不能为空")
    private String goodsPriceUnit;

    /**
     * 计划卸货时间
     */
    @NotNull(message = "计划卸货时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate endTime;

    /**
     * 计划发货时间
     */
    @NotNull(message = "计划发货时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate startTime;

    /**
     * 结算周期(周结、月结、季结)
     */
    @Min(value = 0, message = "必须大于等于{value}")
    @Max(value = 5, message = "必须小于等于{value}")
    private Long settlementCycle;

    /**
     * 合同id
     */
    @NotNull(message = "合同id不能为空")
    private String contractId;

    /**
     * 合同编号
     */
    @NotBlank(message = "合同编号不能为空")
    private String contractNo;

    /**
     * 合同名称
     */
    @NotBlank(message = "合同名称不能为空")
    private String contractName;

    /**
     * 支付方式
     */
    @NotNull(message = "支付方式不能为空")
    @Min(value = 0, message = "支付方式必须大于等于{value}")
//    @Max(value = 4, message = "支付方式必须小于等于{value}")
    private Long payment;


    /**
     * 签约方式
     */
    @NotNull(message = "签约方式不能为空")
    @Min(value = 0, message = "签约方式必须大于等于{value}")
    @Max(value = 10, message = "签约方式必须小于等于{value}")
    private String signingWay;

    /**
     * 备注
     */
    @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
    private String remark;

    /**
     *装货地址id
     */
    private String loadId;

    /**
     *装货地址名称
     */
    private String loadName;

    /**
     * 装货城市编码
     */
    @NotNull(message = "装货城市编码不能为空")
    @Min(value = 0, message = "装货城市编码必须大于等于{value}")
    @Max(value = 1000000, message = "装货城市编码必须小于等于{value}")
    private Integer loadCityCode;

    /**
     * 装货城市名称
     */
    @NotBlank(message = "装货城市名称不能为空")
    private String loadCityName;

    /**
     * 装货联系人
     */
    @NotBlank(message = "装货联系人不能为空")
    private String loadContacts;

    /**
     * 装货联系电话
     */
    @NotBlank(message = "装货联系电话不能为空")
    private String loadPhone;

    /**
     * 装货详细地址
     */
    @NotBlank(message = "装货详细地址不能为空")
    private String loadDetailAddress;

    /**
     * 装货地址经度
     */
    private String loadLat;

    /**
     * 装货地址纬度
     */
    private String loadLng;

    /**
     *卸货地址id
     */
    private String unloadId;

    /**
     *卸货地址名称
     */
    private String unloadName;

    /**
     * 卸货城市编码
     */
    @NotNull(message = "卸货城市编码不能为空")
    @Min(value = 0, message = "卸货城市编码必须大于等于{value}")
    @Max(value = 1000000, message = "卸货城市编码必须小于等于{value}")
    private Integer unloadCityCode;

    /**
     * 卸货城市名称
     */
    @NotBlank(message = "卸货城市名称不能为空")
    private String unloadCityName;

    /**
     * 卸货联系人
     */
    @NotBlank(message = "卸货联系人不能为空")
    private String unloadContacts;

    /**
     * 卸货联系电话
     */
    @NotBlank(message = "卸货联系电话不能为空")
    private String unloadPhone;

    /**
     * 卸货详细地址
     */
    @NotBlank(message = "卸货详细地址不能为空")
    private String unloadDetailAddress;

    /**
     * 卸货地址经度
     */
    private String unloadLat;

    /**
     * 卸货地址纬度
     */
    private String unloadLng;

}
