package com.spot.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 会员资金钱包实体类
 * 对应 member_wallet 表，存储用户在资金账户中各币种的余额
 *
 * @author jean
 * @date 2026-05-08
 */
@Data
@TableName("member_wallet")
public class MemberWallet {

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

    /** 该币种的充值地址（用户用于接收充币的区块链地址） */
    private String address;

    /**
     * 可用余额：用户可以自由使用的资产数量
     */
    private BigDecimal balance;

    /**
     * 冻结余额：因挂单、提现审核等操作被锁定的资产，不可直接使用
     */
    private BigDecimal frozenBalance;

    /**
     * 钱包锁定状态：0=未锁定，1=已锁定
     * 锁定后用户无法进行充值、提现、交易等任何操作
     * @see com.spot.utils.Constant#WALLET_IS_LOCK_NO
     * @see com.spot.utils.Constant#WALLET_IS_LOCK_YES
     */
    private Integer isLock;

    /** 所属会员ID，关联 member.id */
    private Long memberId;

    /**
     * 待释放总量：通过活动、挖矿等途径获得但尚未完全释放到可用余额的资产
     */
    private BigDecimal toReleased;

    /**
     * 乐观锁版本号，防止余额并发修改冲突
     * 扣减余额时必须携带版本号，SQL 层校验版本一致后才执行更新
     */
    private Integer version;

    /** 币种标识，关联 coin.name（如 "USDT"、"BTC"） */
    private String coinId;
}
