package com.sckw.car.entity.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

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

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

    /*
   托运企业id
    */
    @NotNull(message = "托运企业id不能是空")
    private String tyCompanyId;

    /**
     * 托运企业
     */
    @NotBlank(message = "托运企业不能是空")
    private String tyCompany;

    /**
     * 托运联系方式
     */
    private String tyPhone;

    @NotNull(message = "发货企业id不能是空")
    private String fhCompanyId;

    /**
     * 发货企业
     */
    @NotBlank(message = "发货企业不能是空")
    private String fhCompany;

    /**
     * fh_phone
     */
    private String fhPhone;

    /*
    承运物流公司id
     */
    @NotNull(message = "承运企业id不能是空")
    private String cyCompanyId;

    /**
     * 承运物流有限公司
     */
    @NotBlank(message = "承运物流公司不能是空")
    private String cyCompany;

    /**
     * 承运联系方式
     */
    private String cyPhone;

    /*
    收货企业id
     */
    @NotNull(message = "收货企业id不能是空")
    private String shCompanyId;

    /**
     * 收货企业
     */
    private String shCompany;

    /**
     * 收货联系方式
     */
    private String shPhone;


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

    /**
     * skuId
     */
//    @NotNull(message = "goodsId不能为空")
//    private Long skuId;

    /**
     * 货物名称
     */
    //@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;

    /**
     * 运价方式
     */
    //private Long priceType;

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

    /**
     * 税率单位
     */
    private String taxRateUnit;

    /**
     * 总量
     */
    private BigDecimal amount;

    /**
     * 总量单位
     */
    private String amountUnit;

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

    /**
     * 合理损耗单位
     */
    private String lossUnit;

    /*
    订单状态
     */
    private Integer status;

    /**
     * 商品价值（扣亏货值）
     */
    private BigDecimal goodsPrice;
    /**
     * 商品价值（扣亏货值）单位
     */
    private String goodsPriceUnit;

    /**
     * 计划卸货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
    private LocalDateTime endTime;

    /**
     * 计划发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
    private LocalDateTime startTime;

    /**
     * 结算周期(周结、月结、季结)
     */
    private Long settlementCycle;

    /**
     * 支付方式
     */
//    @Max(value = 4, message = "支付方式必须小于等于{value}")
    private Long payment;


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

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


    private KwOrderCarLandTransportMoreReq more;

    private KwOrderCarLandTransportPerParam transportPer;
    private KwOrderCarLandTransportDefGoodsReq defGoods;
}
