package com.spot.enums;

/**
 * 订单买卖方向枚举
 *
 * @author jean
 * @date 2026-05-06
 */
public enum OrderSide {

    /**
     * 买单
     */
    BUY("BUY", "买单"),

    /**
     * 卖单
     */
    SELL("SELL", "卖单");

    /** 方向代码（数据库存储值） */
    private final String code;

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

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

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据代码获取枚举，不匹配返回 null
     *
     * @param code 方向代码
     * @return 枚举值，不匹配时返回 null
     */
    public static OrderSide fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return null;
        }
        for (OrderSide side : values()) {
            if (side.code.equalsIgnoreCase(code.trim())) {
                return side;
            }
        }
        return null;
    }

    /**
     * 是否为买单
     *
     * @return true-买单
     */
    public boolean isBuy() {
        return this == BUY;
    }

    /**
     * 是否为卖单
     *
     * @return true-卖单
     */
    public boolean isSell() {
        return this == SELL;
    }

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