package com.erp.product.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
 * 商品实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goods")
public class Goods {
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 商品名称
     */
    private String name;
    
    /**
     * 商品编码
     */
    private String code;
    
    /**
     * 条形码
     */
    private String barcode;
    
    /**
     * 商品分类
     */
    private String category;
    
    /**
     * 商品单位
     */
    private String unit;
    
    /**
     * 重量（kg）
     */
    private BigDecimal weight;
    
    /**
     * 零售价格
     */
    private BigDecimal retailPrice;
    
    /**
     * 成本价格
     */
    private BigDecimal costPrice;
    
    /**
     * 库存预警值
     */
    private Integer stockWarning;
    
    /**
     * 商品类型：normal-普通商品，combo-组套商品
     */
    private String type;
    
    /**
     * 自定义ID（外部系统关联）
     */
    private String customId;
    
    /**
     * 包装成本
     */
    private BigDecimal packagingCost;
    
    /**
     * 配送包装成本
     */
    private BigDecimal shippingPackagingCost;
    
    /**
     * 体积
     */
    private BigDecimal volume;
    
    /**
     * 长度（cm）
     */
    private BigDecimal length;
    
    /**
     * 宽度（cm）
     */
    private BigDecimal width;
    
    /**
     * 高度（cm）
     */
    private BigDecimal height;
    
    /**
     * 品牌ID
     */
    private Long brandId;
    
    /**
     * 是否启用批号管理
     */
    private Boolean batchManagement;
    
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
    
    /**
     * 删除时间（逻辑删除）
     */
    @TableLogic
    private LocalDateTime deletedAt;
    
    // ==================== 关联对象（不映射到数据库） ====================
    
    /**
     * 品牌信息
     */
    @TableField(exist = false)
    private Brand brand;
    
    /**
     * 供应商列表
     */
    @TableField(exist = false)
    private List<Supplier> suppliers;
    
    /**
     * 组套商品子项（仅combo类型）
     */
    @TableField(exist = false)
    private List<ComboItem> comboItems;
    
    // ==================== 辅助方法 ====================
    
    /**
     * 判断是否为普通商品
     */
    public boolean isNormal() {
        return "normal".equals(type);
    }
    
    /**
     * 判断是否为组套商品
     */
    public boolean isCombo() {
        return "combo".equals(type);
    }
    
    /**
     * 获取类型标签
     */
    public String getTypeLabel() {
        return isCombo() ? "组套商品" : "普通商品";
    }
}
