package com.yhy.module.core.dal.dataobject.quota;

import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yhy.module.core.dal.typehandler.PostgreSQLJsonbTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 定额子目/基价 DO
 * 
 * 对应表 yhy_quota_item
 * 
 * 定额基价数据列表（第四层），一对多关联到第三层的"内容"节点
 * 
 * @author yhy
 */
@TableName(value = "yhy_quota_item", autoResultMap = true)
@KeySequence("yhy_quota_item_id_seq")
@Data
@EqualsAndHashCode(callSuper = true)
public class QuotaItemDO extends TenantBaseDO {

    /**
     * 主键
     */
    @TableId
    private Long id;

    /**
     * 定额条目ID（关联 yhy_catalog_item）
     * 
     * 只能关联 content_type='content' 的节点
     */
    private Long catalogItemId;

    /**
     * 计量单位
     */
    private String unit;

    /**
     * 定额基价
     * 
     * 由工料机组成自动计算：base_price = Σ(resource_price * dosage * (1 + loss_rate))
     */
    private BigDecimal basePrice;

    /**
     * 合价/金额
     */
    private BigDecimal amount;

    /**
     * 扩展属性（JSONB）
     * 
     * 可存储：
     * - labor_cost: 人工费
     * - material_cost: 材料费
     * - machine_cost: 机械费
     * - version_no: 版本号
     * - remark: 备注
     * - 其他自定义字段
     */
    @TableField(typeHandler = PostgreSQLJsonbTypeHandler.class)
    private Map<String, Object> attributes;

    // ========== 便捷方法 ==========

    /**
     * 获取人工费
     */
    public BigDecimal getLaborCost() {
        if (attributes == null) return null;
        Object value = attributes.get("labor_cost");
        if (value instanceof Number) {
            return new BigDecimal(value.toString());
        }
        return null;
    }

    /**
     * 设置人工费
     */
    public void setLaborCost(BigDecimal laborCost) {
        if (attributes == null) {
            attributes = new java.util.HashMap<>();
        }
        attributes.put("labor_cost", laborCost);
    }

    /**
     * 获取材料费
     */
    public BigDecimal getMaterialCost() {
        if (attributes == null) return null;
        Object value = attributes.get("material_cost");
        if (value instanceof Number) {
            return new BigDecimal(value.toString());
        }
        return null;
    }

    /**
     * 设置材料费
     */
    public void setMaterialCost(BigDecimal materialCost) {
        if (attributes == null) {
            attributes = new java.util.HashMap<>();
        }
        attributes.put("material_cost", materialCost);
    }

    /**
     * 获取机械费
     */
    public BigDecimal getMachineCost() {
        if (attributes == null) return null;
        Object value = attributes.get("machine_cost");
        if (value instanceof Number) {
            return new BigDecimal(value.toString());
        }
        return null;
    }

    /**
     * 设置机械费
     */
    public void setMachineCost(BigDecimal machineCost) {
        if (attributes == null) {
            attributes = new java.util.HashMap<>();
        }
        attributes.put("machine_cost", machineCost);
    }

    /**
     * 获取版本号
     */
    public String getVersionNo() {
        return attributes != null ? (String) attributes.get("version_no") : null;
    }

    /**
     * 设置版本号
     */
    public void setVersionNo(String versionNo) {
        if (attributes == null) {
            attributes = new java.util.HashMap<>();
        }
        attributes.put("version_no", versionNo);
    }

    /**
     * 获取备注
     */
    public String getRemark() {
        return attributes != null ? (String) attributes.get("remark") : null;
    }

    /**
     * 设置备注
     */
    public void setRemark(String remark) {
        if (attributes == null) {
            attributes = new java.util.HashMap<>();
        }
        attributes.put("remark", remark);
    }
}
