package com.hzs.retail.sale.param;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.core.annotation.BigDecimalFormat;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.enums.EDelivery;
import com.hzs.common.core.enums.ETransportType;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.sale.order.param.OrderItemsParam;
import com.hzs.sale.shopping.vo.ShoppingCartRedis;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 新零售订单入参
 */
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class RetailOrderParam implements Serializable {

    /**
     * 所属专区
     */
    @NotNull(message = "所属专区不能为空")
    private Integer specialArea;

    /**
     * 删除购物车
     */
    @NotNull(message = "缺少商品信息")
    private List<ShoppingCartRedis> shopList;

    /**
     * 收货人
     */
    @NotEmpty(message = "收货人信息不能为空")
    @Size(max = 20, message = "收货人不能超过20位")
    private String recName;
    /**
     * 收货电话
     */
    @NotEmpty(message = "收货人信息不能为空")
    @Size(max = 20, message = "收货电话不能超过20位")
    private String recPhone;
    /**
     * 收货省
     */
    @NotNull(message = "收货人信息不能为空")
    private Integer recProvince;
    /**
     * 收货市
     */
    @NotNull(message = "收货人信息不能为空")
    private Integer recCity;
    /**
     * 收货县
     */
    @NotNull(message = "收货人信息不能为空")
    private Integer recCounty;
    /**
     * 收货地址
     */
    @NotEmpty(message = "收货人信息不能为空")
    @Size(max = 100, message = "收货地址不能超过100位")
    private String recAddress;
    /**
     * 备注
     */
    @Size(max = 200, message = "备注不能超过200位")
    private String remark;

    /**
     * 所属国家默认为中国
     */
    private Integer pkCountry = CountryConstants.CHINA_COUNTRY;
    /**
     * 发货方式（1=快递发货）
     */
    private Integer deliveryWay = EDelivery.FAST_MAIL.getValue();
    /**
     * 运输方式（1=陆运）
     */
    private Integer tranType = ETransportType.LAND.getValue();

    /**
     * 数据来源 -- EDataSource
     */
    private Integer source;

    /**
     * 推荐人ID
     */
    private Long pkParent;

    /**
     * 购买人ID
     */
    private Long pkCreator;
    /**
     * 购买会员
     */
    @JsonIgnore
    private CuMember creatorMember;

    /**
     * 订单编号
     */
    private String orderCode;
    /**
     * 订单商品明细
     */
    private List<OrderItemsParam> orderItemsParams;
    /**
     * 会员等级
     */
    private Integer pkGrade;
    /**
     * 会员奖衔
     */
    private Integer pkAwards;

    /**
     * 邮费
     */
    @JsonIgnore
    @BigDecimalFormat
    private BigDecimal postage = BigDecimal.ZERO;
    /**
     * 特殊邮费（处理不参与复购300包邮的邮费）
     */
    @BigDecimalFormat
    private BigDecimal specialPostage = BigDecimal.ZERO;
    /**
     * 特殊邮费金额（处理不参与复购300包邮的邮费）
     */
    @BigDecimalFormat
    private BigDecimal specialPostageAmount = BigDecimal.ZERO;

    /**
     * 会员姓名
     */
    private String memberName;
    /**
     * 联系方式
     */
    private String phone;

    /**
     * 系统类型（2=新零售，3=美业）
     */
    private Integer systemType;

    /**
     * 是否支付操作（0=是，1=否）
     */
    private Integer isPay;

}
