package com.market.enums;

/**
 * 行情机器人状态枚举
 *
 * @author jean
 * @date 2026-05-11
 */
public enum RobotStatus {

    /**
     * 趋势运行中：按 trend 方向漂移，尚未到达目标价
     */
    RUNNING(1, "趋势运行"),

    /**
     * 已停止：手动停止，不再生成价格
     */
    STOPPED(2, "已停止"),

    /**
     * 盘整震荡（已废弃）：保留用于数据库兼容，运行时等同于 RUNNING，下一个 tick 自动切换为 BRIDGING
     */
    HOVERING(3, "盘整震荡"),

    /**
     * 成桥过渡：到达目标价后在目标价上下来回走桥，循环往复
     * 涨趋势：先跌到桥目标价，再涨回，循环
     * 跌趋势：先涨到桥目标价，再跌回，循环
     * 横盘：初始方向随机，之后每次翻转，循环
     */
    BRIDGING(4, "成桥过渡");

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

    /** 状态描述 */
    private final String desc;

    RobotStatus(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    /**
     * 根据状态码获取枚举
     *
     * @param code 状态码
     * @return 对应枚举
     */
    public static RobotStatus fromCode(int code) {
        for (RobotStatus s : values()) {
            if (s.code == code) {
                return s;
            }
        }
        throw new IllegalArgumentException("未知状态码: " + code);
    }

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