package org.lym.pom.repository.mongo.enums;

import org.shoulder.core.dictionary.model.NameAsIdDictionaryItemEnum;

/**
 * 动态状态枚举，用于表示文章或内容的不同状态：
 * - 草稿（仅作者可见）
 * - 待审核（仅作者可见）
 * - 正常可见（所有人可见）
 * - 风控退回（仅作者可见）
 * - 用户删除（不可见）
 * - 管理移除（不可见）
 *
 * @author lym
 */
public enum PostStatusEnum implements NameAsIdDictionaryItemEnum<PostStatusEnum> {

    /**
     * 草稿状态
     */
    DRAFT("DR", "草稿"),

    /**
     * 待审核状态
     */
    PENDING_AUDIT("A", "待审核"),

    /**
     * 正常可见状态
     */
    NORMAL("N", "正常可见"),

    /**
     * 风控退回状态
     */
    RISK_CONTROL_REJECTED("R", "风控退回"),

    /**
     * 用户删除状态
     */
    DELETED("D", "删除"),

    /**
     * 管理移除状态
     */
    ADMIN_REMOVED("FR", "管理移除");

    private final String storageName;
    private final String displayName;

    PostStatusEnum(String storageName, String displayName) {
        this.storageName = storageName;
        this.displayName = displayName;
    }

    public String getStorageName() {
        return storageName;
    }



    /**
     * 从存储名称获取对应的枚举值
     *
     * @param storageName 存储名称
     * @return 枚举值
     * @throws IllegalArgumentException 如果存储名称无效
     */
    public static PostStatusEnum fromStorageName(String storageName) {
        for (PostStatusEnum status : values()) {
            if (status.getStorageName().equals(storageName)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Invalid post status storage name: " + storageName);
    }

    @Override
    public String getDisplayName() {
        return displayName;
    }
}
