package com.yc.ship.module.product.controller.admin.productSpu.spuVO;

import com.yc.ship.module.product.controller.admin.productSpu.baseRuleVO.ProductBasicRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.checkRuleVO.ProductCheckRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.groupVO.PlatProductSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.groupVO.ProductGroupSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.noticeRuleVO.ProductNoticeRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.otherRuleVO.ProductOtherRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.refundRuleVO.ProductRefundRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.saleRuleVO.ProductSaleRuleSaveReqVO;
import com.yc.ship.module.product.controller.admin.productSpu.skuVO.ProductSkuSaveReqVO;
import com.yc.ship.module.product.controller.admin.productTakeRule.vo.ProductTakeRuleSaveReqVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

@Schema(description = "管理后台 - 产品基础信息新增/修改 Request VO")
@Data
public class ProductSpuSaveReqVO {

    @Schema(description = "主键", example = "20189")
    private Long id;

    @Schema(description = "产品名称", example = "王五")
    @NotEmpty(message = "产品名称不能为空")
    private String productName;

    @Schema(description = "产品简称", example = "王五")
    private String shortName;

    @Schema(description = "产品编码")
    private String productCode;

    @Schema(description = "产品类型", example = "2")
    private Integer productType;

    @Schema(description = "产品分类", example = "21748")
    @NotNull(message = "产品分类不能为空")
    private Long categoryId;

    @Schema(description = "产品标签为空", example = "21748")
    private String productTag;

    @Schema(description = "运营标签为空", example = "21748")
    private String productTag2;

    @Schema(description = "业务标签为空", example = "21748")
    private String productTag3;

    @Schema(description = "产品标签4为空", example = "21748")
    private String productTag4;

    @Schema(description = "产品销售渠道(以,分隔)")
    @NotEmpty(message = "产品销售渠道不能为空")
    private String productSaleChannels;

    @Schema(description = "销售一口价", example = "13215")
    private BigDecimal salePrice;

    @Schema(description = "成本价", example = "11044")
    private BigDecimal costPrice;

    @Schema(description = "产品介绍")
    private String productIntroduction;

    @Schema(description = "预定须知")
    private String bookingInstructions;

    @Schema(description = "排序号")
    private Integer sortNum;

    @Schema(description = "几日游")
    private Integer dayNum;

    @Schema(description = "上架状态")
    @NotNull(message = "上架状态不能为空")
    private Integer isUse;

    @Schema(description = "水平封面")
    private String coverImgHorizontal;

    @Schema(description = "竖形封面")
    private String coverImgVertical;

    @Schema(description = "是否计入统计")
    private Integer isValidated;

    @Schema(description = "是否必选时间方案")
    private Integer vePlan;

    @Schema(description = "水平封面")
    private Integer roomType;

    @Schema(description = "竖形封面")
    private Integer bedType;

    @Schema(description = "含早餐类型")
    private Integer hasBreakfast;

    @Schema(description = "产品规格信息")
    private List<@Valid ProductSpecSaveReqVO> productSpecList;

    @Schema(description = "基础产品产品规格信息")
    private List<@Valid ProductGroupSaveReqVO> productGroupList;

    @Schema(description = "平台产品信息")
    private List<@Valid PlatProductSaveReqVO> platProductList;

    @Schema(description = "产品sku信息")
    private List<ProductSkuSaveReqVO> productSkuList;

    @Schema(description = "产品基础规则")
    private ProductBasicRuleSaveReqVO productBasicRule;

    @Schema(description = "产品售票规则")
    private ProductSaleRuleSaveReqVO productSaleRule;

    @Schema(description = "产品取票规则")
    private ProductTakeRuleSaveReqVO productTakeRule;

    @Schema(description = "产品检票规则")
    private ProductCheckRuleSaveReqVO productCheckRule;

    @Schema(description = "产品退票规则")
    private ProductRefundRuleSaveReqVO productRefundRule;

    @Schema(description = "产品通知规则")
    private ProductNoticeRuleSaveReqVO productNoticeRule;

    @Schema(description = "产品其他规则")
    private ProductOtherRuleSaveReqVO productOtherRule;

    @Schema(description = "游船列表")
    private String shipIds;


}