package com.spot.enums;

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

    /**
     * 1 - 资金转入
     */
    TRANSFER_IN(1, "资金转入"),

    /**
     * 2 - 资金转出
     */
    TRANSFER_OUT(2, "资金转出"),

    /**
     * 3 - 下单冻结
     */
    ORDER(3, "下单"),

    /**
     * 4 - 撤单解冻
     */
    CANCEL(4, "撤单"),

    /**
     * 5 - 成交
     */
    TRADE(5, "成交"),

    /**
     * 6 - 手续费
     */
    FEE(6, "手续费"),

    /**
     * 7 - 解冻
     */
    UNFREEZE(7, "解冻");

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

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

    AccountRecordType(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 AccountRecordType fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (AccountRecordType type : values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的账户流水类型码: " + code);
    }

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