package com.erp.tenant.entity.goods;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.erp.tenant.entity.common.BaseEntity;

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

/**
 * 商品实体
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("goods")
public class Goods extends BaseEntity {

    // ==================== 商品状态 ====================
    /** 状态：在售 */
    public static final int STATUS_ON_SALE = 1;
    /** 状态：下架 */
    public static final int STATUS_OFF_SALE = 0;
    /** 状态：已删除 */
    public static final int STATUS_DELETED = -1;

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

    // ==================== 基本信息 ====================
    /** 商品编码 */
    @TableField("goods_code")
    private String goodsCode;

    /** 商品名称 */
    private String name;

    /** 商品别名 */
    private String alias;

    /** 条形码 */
    @TableField("bar_code")
    private String barCode;

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

    /** 分类名称 */
    @TableField("category_name")
    private String categoryName;

    /** 品牌ID */
    @TableField("brand_id")
    private Long brandId;

    /** 品牌名称 */
    @TableField("brand_name")
    private String brandName;

    // ==================== 价格和单位 ====================
    /** 销售价 */
    @TableField("sale_price")
    private BigDecimal salePrice;

    /** 成本价 */
    @TableField("cost_price")
    private BigDecimal costPrice;

    /** 批发价 */
    @TableField("wholesale_price")
    private BigDecimal wholesalePrice;

    /** 单位 */
    private String unit;

    /** 重量（克） */
    private Integer weight;

    // ==================== 库存相关 ====================
    /** 安全库存 */
    @TableField("safe_stock")
    private Integer safeStock;

    /** 预警阈值 */
    @TableField("warning_threshold")
    private Integer warningThreshold;

    // ==================== 状态 ====================
    /** 状态：1-在售，0-下架 */
    private Integer status;

    // ==================== 描述 ====================
    /** 商品描述 */
    private String description;

    /** 商品图片（JSON数组） */
    private String images;

    /** 备注 */
    private String remark;

    // ==================== 非数据库字段 ====================
    @TableField(exist = false)
    private Integer stockQuantity;

    @TableField(exist = false)
    private Integer availableQuantity;

    // ==================== 辅助方法 ====================
    public String getStatusText() {
        return status != null && status == STATUS_ON_SALE ? "在售" : "下架";
    }

    public boolean isOnSale() {
        return status != null && status == STATUS_ON_SALE;
    }
}
