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

import lombok.Getter;

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

/**
 * 作业状态枚举
 * 0-待完成 1-已完成 2-已取消
 */
@Getter
public enum JobStatusEnum {

    PENDING(0, "待完成"),
    COMPLETED(1, "已完成"),
    CANCELED(2, "已取消");

    private final Integer code;
    private final String description;

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

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

    /**
     * 根据 code 获取描述
     */
    public static String getDescriptionByCode(Integer code) {
        JobStatusEnum status = getByCode(code);
        return status != null ? status.getDescription() : "未知";
    }

    /**
     * 校验 code 是否有效
     */
    public static boolean isValidCode(Integer code) {
        return getByCode(code) != null;
    }

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

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

    /**
     * 获取 code -> 描述 映射
     */
    public static Map<Integer, String> getCodeDescriptionMap() {
        Map<Integer, String> map = new LinkedHashMap<>();
        for (JobStatusEnum status : values()) {
            map.put(status.getCode(), status.getDescription());
        }
        return map;
    }
}
