package cn.iocoder.yudao.module.mes.controller.admin.moldticketresults.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 作业结果枚举
 */
@Getter
@AllArgsConstructor
public enum MoldJobResultEnum {

    /**
     * 待完成
     */
    PENDING(0, "待完成"),

    /**
     * 通过
     */
    PASS(1, "通过"),

    /**
     * 不通过
     */
    FAIL(2, "不通过");

    /**
     * 结果编码
     */
    private final Integer code;

    /**
     * 结果描述
     */
    private final String description;

    /**
     * 根据编码获取枚举
     */
    public static MoldJobResultEnum getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (MoldJobResultEnum status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

    /**
     * 判断编码是否有效
     */
    public static boolean isValidCode(Integer code) {
        return getByCode(code) != null;
    }

    /**
     * 获取所有编码
     */
    public static List<Integer> getAllCodes() {
        return Arrays.stream(values())
                .map(MoldJobResultEnum::getCode)
                .collect(Collectors.toList());
    }

    /**
     * 获取所有描述
     */
    public static List<String> getAllDescriptions() {
        return Arrays.stream(values())
                .map(MoldJobResultEnum::getDescription)
                .collect(Collectors.toList());
    }

    /**
     * 是否为待完成
     */
    public boolean isPending() {
        return this == PENDING;
    }

    /**
     * 是否为通过
     */
    public boolean isPass() {
        return this == PASS;
    }

    /**
     * 是否为不通过
     */
    public boolean isFail() {
        return this == FAIL;
    }

    /**
     * 是否已完成（通过或不通过都算完成）
     */
    public boolean isCompleted() {
        return this == PASS || this == FAIL;
    }
}