package com.jeesharp.business.modules.mall.dto;

import lombok.Data;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.math.BigDecimal;
import java.util.List;

/**
 * 商品完整保存DTO（包含SPU、SKU、规格信息）
 */
@Data
public class MallProductSaveDTO {

    // =============== SPU 信息 ===============

    /**
     * SPU ID（更新时必填）
     */
    private String spuId;

    /**
     * 商品名称
     */
    @NotBlank(message = "商品名称不能为空")
    private String spuName;

    /**
     * 商品编码（自动生成时可为空）
     */
    private String spuCode;

    /**
     * 分类ID
     */
    @NotBlank(message = "分类ID不能为空")
    private String categoryId;

    /**
     * 品牌ID
     */
    private String brandId;

    /**
     * 主图
     */
    private String mainImage;

    /**
     * 轮播图（JSON数组）
     */
    private String images;

    /**
     * 商品详情（富文本）
     */
    private String detail;

    /**
     * 发货时效：1-今日发 2-24小时发货 3-48小时发货 4-大于48小时发货
     *
     * @see com.jeesharp.business.modules.mall.enums.MallSpuShipTimeTypeEnum
     */
    private Integer shipTimeType;

    /**
     * 运费（元）
     */
    private BigDecimal freightAmount;

    /**
     * 运费模板主键
     */
    private String freightTemplateId;

    /**
     * 扩展属性行（落库 mall_spu_ext_attr，保存时按 SPU 全量替换）
     */
    private List<MallSpuExtAttrSaveDTO> extAttrs;

    /**
     * 虚拟销量
     */
    private Integer virtualSales;

    /**
     * 排序号
     */
    private Integer sortOrder;

    /**
     * 状态：0-下架 1-上架
     */
    @NotNull(message = "状态不能为空")
    private Integer status;

    /**
     * 商户ID（多商户场景下关联商户，单商户可空）
     */
    private String merchantId;

    // =============== SKU 信息 ===============

    /**
     * SKU列表
     */
    @Valid
    @Size(min = 1, message = "至少需要一个SKU")
    private List<MallSkuSaveDTO> skuList;

    // =============== 规格信息 ===============

    /**
     * 规格ID列表（关联的规格）
     */
    private List<String> specIds;

    // =============== 标签信息 ===============

    /**
     * 标签ID列表
     */
    private List<String> tagIds;
}