package com.spot.enums;

/**
 * 账户划转方向枚举
 * 描述资金在资金账户（member_wallet）与现货账户（account）之间的流动方向
 *
 * @author jean
 * @date 2026-05-08
 */
public enum TransferDirection {

    /**
     * 1 - 资金账户转入现货账户
     * 操作：扣减 member_wallet.balance，增加 account.hot_money
     */
    FUND_TO_SPOT(1, "资金账户转入现货账户"),

    /**
     * 2 - 现货账户转出到资金账户
     * 操作：扣减 account.hot_money，增加 member_wallet.balance
     */
    SPOT_TO_FUND(2, "现货账户转出到资金账户");

    /** 方向码（接口传入值） */
    private final Integer code;

    /** 方向描述（中文） */
    private final String description;

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

    /**
     * 获取方向码
     *
     * @return 方向码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取方向描述
     *
     * @return 中文描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 根据方向码获取枚举，无效码返回 null
     *
     * @param code 方向码
     * @return 枚举值，code 为 null 或不存在时返回 null
     */
    public static TransferDirection fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (TransferDirection direction : values()) {
            if (direction.code.equals(code)) {
                return direction;
            }
        }
        return null;
    }

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