package com.yami.shop.bean.app.dto;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * Merged order view used by /confirm.
 */
@Data
public class ShopCartOrderMergerDto implements Serializable {

    @ApiModelProperty(value = "Actual total", required = true)
    private Double actualTotal;

    @ApiModelProperty(value = "Product total", required = true)
    private Double total;

    @ApiModelProperty(value = "Product count", required = true)
    private Integer totalCount;

    @ApiModelProperty(value = "Total order discount amount", required = true)
    private Double orderReduce = 0.0;

    @ApiModelProperty(value = "Required score", required = true)
    private Integer scorePrice = 0;

    @ApiModelProperty(value = "Usable score in this order", required = true)
    private Double totalUsableScore = 0.0;

    @ApiModelProperty(value = "Available score")
    private Long totalAvailableScore = 0L;

    @ApiModelProperty(value = "Max usable score", required = true)
    private Integer maxUsableScore = 0;

    @ApiModelProperty(value = "Score discount amount", required = true)
    private Double totalScoreAmount = 0.0;

    @ApiModelProperty(value = "Shop score rate", required = true)
    private Double shopUseScore;

    @ApiModelProperty(value = "Level discount amount", required = true)
    private Double totalLevelAmount;

    @ApiModelProperty(value = "Member discount amount", required = true)
    private Double memberDiscountAmount = 0.0;

    @ApiModelProperty(value = "Member discount description")
    private String memberDiscountDesc;

    @ApiModelProperty(value = "Member benefit description for confirm page")
    private String memberBenefitDesc;

    @ApiModelProperty(value = "Member discount rate, 0.95 means 9.5 discount")
    private Double memberDiscountRate;

    @ApiModelProperty(value = "Free shipping amount", required = true)
    private Double freeTransfee = 0.0;

    @ApiModelProperty(value = "Total shipping fee", required = true)
    private Double totalTransfee;

    @ApiModelProperty(value = "User address", required = true)
    private UserAddrDto userAddr;

    @ApiModelProperty(value = "Per-shop cart orders", required = true)
    private List<ShopCartOrderDto> shopCartOrders;

    @ApiModelProperty(value = "Available coupons for the order", required = true)
    private List<CouponOrderDto> coupons;

    @ApiModelProperty(value = "Submit uuid")
    private String uuid;

    @ApiModelProperty(value = "Whether score pay is enabled")
    private Integer isScorePay;

    @ApiModelProperty(value = "Delivery type")
    private Integer dvyType;

    private Long channelId;

    private Double weight;

    private Boolean nextPay = Boolean.FALSE;
}
