package tech.easyflow.ai.enums;

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

/**
 * AI 资源发布状态。
 */
public enum PublishStatus {

    DRAFT("DRAFT"),
    PUBLISH_PENDING("PUBLISH_PENDING"),
    PUBLISHED("PUBLISHED"),
    OFFLINE_PENDING("OFFLINE_PENDING"),
    OFFLINE("OFFLINE"),
    DELETE_PENDING("DELETE_PENDING");

    private final String code;

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

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

    /**
     * 是否允许作为线上版本使用。
     *
     * @return 允许外部访问或线上运行时返回 true
     */
    public boolean isExternallyVisible() {
        return this == PUBLISHED || this == DELETE_PENDING || this == OFFLINE_PENDING;
    }

    /**
     * 是否允许作为 Bot 新绑定候选。
     *
     * @return 仅已发布状态返回 true
     */
    public boolean isSelectableForBot() {
        return this == PUBLISHED;
    }

    /**
     * 解析发布状态。
     *
     * @param code 状态编码
     * @return 发布状态
     */
    public static PublishStatus from(String code) {
        if (code == null || code.isBlank()) {
            return DRAFT;
        }
        String normalized = code.trim().toUpperCase(Locale.ROOT);
        return Arrays.stream(values())
                .filter(item -> item.code.equals(normalized))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("不支持的发布状态: " + code));
    }
}
