package com.ylx.massage.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
 * 商品表 实体类
 *
 * @author ylx
 * @since 2026-03-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "product",autoResultMap = true)
public class Product implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 商品编号（如AD2026227001）
     */
    @TableField("product_no")
    private String productNo;

    /**
     * 分类ID
     */
    @TableField("category_id")
    private Long categoryId;

    /**
     * 分类名称
     */
    @TableField(exist = false)
    private String categoryName;

    /**
     * 商品名称
     */
    @TableField("name")
    private String name;

    /**
     * 商品主图URL
     */
    @TableField("product_main_image")
    private String productMainImage;

    /**
     * 商品图URL
     */
    @TableField(value = "product_image", typeHandler = JacksonTypeHandler.class)
    private List<String> productImage;

    /**
     * 商品简述
     */
    @TableField("summary")
    private String summary;

    /**
     * 商品详情（富文本HTML）
     */
    @TableField("detail")
    private String detail;

    /**
     * 付款类型（1：积分 2：金额 3：积分+金额）
     */
    @TableField("payment_type")
    private Integer paymentType;

    /**
     * 积分价格
     */
    @TableField("price_point")
    private Integer pricePoint;

    /**
     * 现金价格（元）
     */
    @TableField("price_money")
    private BigDecimal priceMoney;

    /**
     * 原价
     */
    @TableField(exist = false)
    private BigDecimal originalPrice;

    /**
     * 总库存（冗余，由SKU汇总）
     */
    @TableField("stock")
    private Integer stock;

    /**
     * 已售数量
     */
    @TableField("sales")
    private Integer sales;

    /**
     * 基础运费
     */
    @TableField("freight")
    private BigDecimal freight;

    /**
     * 承诺发货时间（如48小时）
     */
    @TableField("delivery_time")
    private String deliveryTime;

    /**
     * 服务承诺，JSON数组存储
     * 例如：["假一赔三", "7天无理由退换", "破损包退换"]
     */
    @TableField(value = "service_promise", typeHandler = JacksonTypeHandler.class)
    private List<String> servicePromise;

    /**
     * 上架开始时间
     */
    @TableField("sale_start_time")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate saleStartTime;

    /**
     * 上架结束时间
     */
    @TableField("sale_end_time")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
    private LocalDate saleEndTime;

    /**
     * 状态：1上架 0下架
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private LocalDateTime updateTime;

    /**
     * 逻辑删除：1已删除 0未删除
     */
    @TableField("deleted")
    @TableLogic
    private Integer deleted;

}