package com.younike.system.param;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 预订服务下单
 * @author Dail
 */
@Data
public class BookOrderParam implements Serializable {
    private static final long serialVersionUID = 1L;


    /**
     * 用户ID
     */
    @NotNull(message = "会员id不能为空")
    private Long memberId;

    /**
     * 服务人员ID
     */
    @NotNull(message = "服务人员id不能为空")
    private Long serverId;

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

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

    /**
     * 订单商品数量
     */
    @NotNull(message = "订单商品数量不能为空")
    private Integer goodsCounts;

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

    /**
     * 订单金额
     */
    @NotNull(message = "订单金额不能为空")
    private BigDecimal orderAmount;

    /**
     * 订单类型 001家政 002维修 003家政团购
     */
    @NotBlank(message = "订单类型不能为空")
    private String orderType;

    /**
     * 实付总价
     */
    @NotNull(message = "实付总价不能为空")
    private BigDecimal totalAmount;

    /**
     * 服务地址id
     */
    @NotNull(message = "服务地址id不能为空")
    private Long addressId;

    /**
     * 商品单价
     */
    @NotNull(message = "商品单价不能为空")
    private BigDecimal price;

    /**
     * 单次服务标准时长
     */
    @NotNull(message = "单次服务标准时长不能为空")
    private BigDecimal singleTime;

    /**
     * 商户名
     */
    private String merchantName;

    /**
     * 服务评价可得优金豆（冗余）
     */
    private Long goodsCoin;

    /**
     * 预约结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime appointmentEndTime;

    /**
     * 是否已结算
     */
    private Integer isSettle;

    /**
     * 优金豆抵扣数量
     */
    private Integer beanAmount;

    /**
     * 用户优惠券ID
     */
    private String memberCouponId;

    /**
     * 优惠金额
     */
    private BigDecimal couponAmount;

    /**
     * 支付方式 code 001微信 002支付宝
     */
    private String payWay;

    /**
     * 订单备注
     */
    private String memo;

    /**
     * 服务总时长
     */
    private BigDecimal totalTime;

    /**
     * 扣除积分手机号
     */
    private String phone;

    /**
     * 订单id
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private Long orderId;

    /**
     * 追加服务金额
     */
    private BigDecimal addAmount;

    /**
     * 追加服务付款方式
     */
    private String addPayWay;

    /**
     * 追加服务数量
     */
    private Integer addCounts;

    /**
     * 支付类型（小程序：APPLET；公众号：PUBLIC；SDK：SDK预下单）
     */
    private String payType;

    /**
     * 一般商家（需合利宝账号分账）001
     * 个人租入商家（不需要分账） 002
     *
     */
    private String bizType;

    /**
     * 配件费
     */
    private BigDecimal maintenanceAmount;

    /**
     * 配件费说明
     */
    private String maintenanceRemark;

}
