package tech.easyflow.approval.enums;

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

/**
 * 审批资源类型枚举。
 */
public enum ApprovalResourceType {

    BOT("BOT"),
    AGENT("AGENT"),
    SKILL("SKILL"),
    WORKFLOW("WORKFLOW"),
    KNOWLEDGE("KNOWLEDGE");

    private final String code;

    ApprovalResourceType(String code) {
        this.code = code;
    }

    /**
     * 获取资源类型编码。
     *
     * @return 资源类型编码
     */
    public String getCode() {
        return code;
    }

    /**
     * 解析资源类型。
     *
     * @param code 资源类型编码
     * @return 资源类型
     */
    public static ApprovalResourceType from(String code) {
        if (code == null) {
            throw new IllegalArgumentException("resourceType不能为空");
        }
        String normalized = code.trim().toUpperCase(Locale.ROOT);
        return Arrays.stream(values())
                .filter(item -> item.code.equals(normalized))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("不支持的resourceType: " + code));
    }

    /**
     * 返回全部资源类型编码。
     *
     * @return 资源类型编码列表
     */
    public static List<String> allCodes() {
        return Arrays.stream(values()).map(ApprovalResourceType::getCode).collect(Collectors.toList());
    }
}
