package com.spot.enums;

/**
 * 订单类型枚举
 *
 * @author jean
 * @date 2026-05-06
 */
public enum OrderType {

    /**
     * 1 - 限价单
     */
    LIMIT(1, "limit", "限价单"),

    /**
     * 2 - 市价单
     */
    MARKET(2, "market", "市价单"),

    /**
     * 3 - 止损单
     */
    STOP(3, "stop", "止损单");

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

    /** 类型名称（英文） */
    private final String name;

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

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

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据类型码获取枚举，code 为 null 或不匹配时返回 null
     *
     * @param code 类型码
     * @return 枚举值，不匹配时返回 null
     */
    public static OrderType fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (OrderType type : values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 是否为限价单
     *
     * @return true-限价单
     */
    public boolean isLimit() {
        return this == LIMIT;
    }

    /**
     * 是否为市价单
     *
     * @return true-市价单
     */
    public boolean isMarket() {
        return this == MARKET;
    }

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