package com.market.enums;

/**
 * 订单状态枚举
 *
 * @author system
 * @date 2026-05-07
 */
public enum OrderStatus {

    /**
     * 初始化状态，等待撮合
     */
    INIT(0, "init", "初始化"),

    /**
     * 新订单，已挂单等待撮合
     */
    NEW(1, "new", "新订单"),

    /**
     * 已完全成交
     */
    FILLED(2, "filled", "已成交"),

    /**
     * 部分成交
     */
    PART_FILLED(3, "part_filled", "部分成交"),

    /**
     * 已撤单
     */
    CANCELED(4, "canceled", "已撤单"),

    /**
     * 撤单中
     */
    PENDING_CANCEL(5, "pending_cancel", "撤单中"),

    /**
     * 已过期
     */
    EXPIRED(6, "expired", "已过期");

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

    /** 状态名称（英文） */
    private final String name;

    /** 状态描述（中文） */
    private final String description;

    OrderStatus(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; }

    /**
     * 根据状态码获取枚举
     *
     * @param code 状态码
     * @return 对应枚举
     */
    public static OrderStatus fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (OrderStatus status : values()) {
            if (status.code.equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("未知的订单状态码: " + code);
    }

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