package com.fs.express.enums;

/**
 * 任务状态枚举
 */
public enum TaskStatusEnum {

    /**
     * 待处理
     */
    PENDING(0, "待处理"),

    /**
     * 成功
     */
    SUCCESS(1, "成功"),

    /**
     * 失败
     */
    FAILED(2, "失败"),

    /**
     * 正在处理
     */
    PROCESSING(3, "正在处理"),

    /**
     * 已取消
     */
    CANCELLED(4, "已取消");

    private final Integer code; // 状态码
    private final String description; // 状态描述

    /**
     * 构造方法
     *
     * @param code        状态码
     * @param description 状态描述
     */
    TaskStatusEnum(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据状态码获取枚举值
     *
     * @param code 状态码
     * @return 对应的枚举值，如果没有匹配的则返回 null
     */
    public static TaskStatusEnum getByCode(Integer code) {
        for (TaskStatusEnum status : TaskStatusEnum.values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

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

    /**
     * 获取状态描述
     *
     * @return 状态描述
     */
    public String getDescription() {
        return description;
    }

    @Override
    public String toString() {
        return "TaskStatusEnum{" +
                "code=" + code +
                ", description='" + description + '\'' +
                '}';
    }
}
