package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.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 RepairEnum {

    PENDING(0, "待维修"),
    PASSED(1, "通过"),
    FAILED(2, "不通过");

    private final Integer code;
    private final String description;

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

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

    /**
     * 根据code获取描述
     */
    public static String getDescriptionByCode(Integer code) {
        RepairEnum 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(RepairEnum::getCode)
                .collect(Collectors.toList());
    }

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

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