package com.storlead.sales.pojo.vo.sku;

import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

@Data
public class MakeOrderSkuDetailVO {

    public interface QueryCheck{};
    /**
     * ssdSkuId
     */
    private Integer ssdSkuId;
    /**
     * 内部编码
     */
    private String ssdSkuCode;

    /**
     * 规格备注
     */
    private String specificationRemarks;

    /**
     * 功能备注
     */
    private String functionRemarks;
    /**
     * 接口类型
     */
    @NotNull(groups = QueryCheck.class, message = "接口类型不能为空")
    @NotBlank(groups = QueryCheck.class, message = "接口类型不能为空")
    private String connectorType;
    /**
     * 主控
     */
    @NotNull(groups = QueryCheck.class, message = "主控不能为空")
    @NotBlank(groups = QueryCheck.class, message = "主控不能为空")
    private String coreChipType;
    /**
     * 温度级别
     */
    @NotNull(groups = QueryCheck.class, message = "温度不能为空")
    @NotBlank(groups = QueryCheck.class, message = "温度不能为空")
    private String productLevel;
    /**
     * 尺寸大小
     */
    @NotNull(groups = QueryCheck.class, message = "尺寸不能为空")
    @NotBlank(groups = QueryCheck.class, message = "尺寸不能为空")
    private String productSize;
    /**
     * 芯片类型
     */
    @NotNull(groups = QueryCheck.class, message = "芯片类型不能为空")
    @NotBlank(groups = QueryCheck.class, message = "芯片类型不能为空")
    private String flashChipType;
    /**
     * 协议类型
     */
    @NotNull(groups = QueryCheck.class, message = "协议类型不能为空")
    @NotBlank(groups = QueryCheck.class, message = "协议类型不能为空")
    private String connectorProtocol;
    /**
     * 容量大小
     */
    @NotNull(groups = QueryCheck.class, message = "容量不能为空")
    @NotBlank(groups = QueryCheck.class, message = "容量不能为空")
    private String capacity;
    /**
     * flash芯片的数量
     */
    private Integer flashChipCount;
    /**
     * flash 芯片单价
     */
    private BigDecimal flashChipPrice;

    /**
     * 額外附加費
     */
    private BigDecimal additionalSurcharges;
    /**
     * flash 芯片单价
     */
    private BigDecimal coreChipPrice;
    /**
     * 是否支持 开通物理销毁
     * true 支持 false 不支持
     */
    private Integer openPhysicalDestroy;
    private Integer newOpenPhysicalDestroy;
    /**
     * 物理销毁的价格 -1 表示不支持物理销毁 在价格的计算的时候需要注意一下
     */
    private BigDecimal physicalDestroyPrice;
    /**
     * 是否支持 开通逻辑销毁
     * true 支持 false 不支持
     */
    private Integer openLogicDestroy;
    private Integer newOpenLogicDestroy;

    /**
     * 逻辑销毁 -1 表示不支持物理销毁 在价格的计算的时候需要注意一下
     */
    private BigDecimal logicDestroyPrice;
    /**
     * 是否支持 aes 加密 true 支持 false 不支持
     */
    private Integer openAesEncrypt;
    private Integer newOpenAesEncrypt;
    /**
     * aes单价 -1 表示不支持物理销毁 在价格的计算的时候需要注意一下
     */
    private BigDecimal aesEncryptPrice;
    /**
     * 是否支持 快速备份 true 支持 false 不支持
     */
    private Integer openRapidBackup;
    private Integer newOpenRapidBackup;
    /**
     * 快速备份 -1 表示不支持物理销毁 在价格的计算的时候需要注意一下
     */
    private BigDecimal rapidBackupPrice;
    /**
     * 产品数量
     */
    @NotNull(groups = QueryCheck.class, message = "采购数量不能为空")
    @Min(groups = QueryCheck.class, message = "采购数量不能小于1" , value = 1)
    private Integer productCount;
    /**
     * 物料单片价格
     */
    private BigDecimal materialPricing;
    /**
     * 单片用工费用
     */
    private BigDecimal processingPricing;
    /**
     * 毛利率
     */
    private BigDecimal rate;
    /**
     * 主控Id
     */
    private Integer ssdCoreShipId;
    /**
     * flash id
     */
    private Integer ssdFlashShipId;
    /**
     * sku 生产周期
     */
    private Integer estimateDay;
    /**
     * 规格书名称
     */
    private String datasheetName;
    /**
     * 规格书URL
     */
    private String datasheetUrl;
    /**
     * sku 总价格 RMB
     */
    private BigDecimal skuPrice;
    /**
     * 单价
     */
    private BigDecimal skuunitPrice;

    /**
     * 强制开通物理销毁(0/false:非强制 1/true:强制 默认0/false)
     */
    private Boolean forceOpenPhysicalDestroy;
    /**
     * 强制开通逻辑销毁(0/false:非强制 1/true:强制 默认0/false)
     */
    private Boolean forceOpenLogicDestroy;
    /**
     * 强制开通AES加密(0/false:非强制 1/true:强制 默认0/false)
     */
    private Boolean forceOpenAesEncrypt;
    /**
     * 强制开通快速备份(0/false:非强制 1/true:强制 默认0/false)
     */
    private Boolean forceOpenRapidBackup;

    /**
     * true 表示是重复数据 false 不是重复数据
     */
    private Boolean repeatData;

    /**
     * 折扣（0.1）
     */
//    private BigDecimal discount = BigDecimal.ZERO;
}
