package tech.easyflow.approval.enums;

import java.util.Arrays;
import java.util.Locale;

/**
 * 审批实例状态枚举。
 */
public enum ApprovalInstanceStatus {

    PENDING("PENDING"),
    PROCESSING("PROCESSING"),
    APPROVED("APPROVED"),
    REJECTED("REJECTED"),
    REVOKED("REVOKED");

    private final String code;

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

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

    /**
     * 判断是否已结束。
     *
     * @return 是否结束
     */
    public boolean isFinished() {
        return this == APPROVED || this == REJECTED || this == REVOKED;
    }

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