package com.spot.enums;

/**
 * 账户流水操作类型枚举
 *
 * @author jean
 * @date 2026-05-06
 */
public enum AccountRecordOperateType {

    /**
     * 1 - 加（余额增加）
     */
    ADD(1, "加"),

    /**
     * 2 - 减（余额减少）
     */
    SUBTRACT(2, "减"),

    /**
     * 3 - 冻结（可用转冻结，总额不变）
     */
    FREEZE(3, "冻结"),

    /**
     * 4 - 解冻（冻结转可用，总额不变）
     */
    UNFREEZE(4, "解冻");

    /** 操作类型码（数据库存储值） */
    private final Integer code;

    /** 操作类型描述（中文） */
    private final String description;

    AccountRecordOperateType(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    public Integer getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据操作类型码获取枚举
     *
     * @param code 操作类型码
     * @return 枚举值
     */
    public static AccountRecordOperateType fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (AccountRecordOperateType type : values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的账户流水操作类型码: " + code);
    }

    @Override
    public String toString() {
        return String.format("%s(%d)", description, code);
    }
}
