package com.starry.common.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.annotations.ApiModel;

/**
 * 评价隐藏状态枚举，集中维护状态代码及含义。
 * 用于订单评价、打赏等记录的显示/隐藏控制。
 */
@ApiModel(value = "评价隐藏状态", description = "评价隐藏状态枚举，避免魔法值")
public enum EvaluateHiddenState {

    VISIBLE("0", "显示"),
    HIDDEN("1", "隐藏");

    private final String code;
    private final String description;

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

    @JsonValue
    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 从代码获取枚举实例
     *
     * @param code 状态代码
     * @return 对应的枚举实例
     */
    @JsonCreator
    public static EvaluateHiddenState fromCode(String code) {
        if (code == null) {
            return null;
        }
        for (EvaluateHiddenState state : EvaluateHiddenState.values()) {
            if (state.code.equals(code)) {
                return state;
            }
        }
        throw new IllegalArgumentException("Unknown EvaluateHiddenState code: " + code);
    }

    /**
     * 判断是否为显示状态
     *
     * @param code 状态代码
     * @return true: 显示, false: 隐藏或未知
     */
    public static boolean isVisible(String code) {
        return VISIBLE.code.equals(code);
    }

    /**
     * 判断是否为隐藏状态
     *
     * @param code 状态代码
     * @return true: 隐藏, false: 显示或未知
     */
    public static boolean isHidden(String code) {
        return HIDDEN.code.equals(code);
    }

    /**
     * 切换显示/隐藏状态
     *
     * @param currentCode 当前状态代码
     * @return 切换后的状态代码
     */
    public static String toggle(String currentCode) {
        return isHidden(currentCode) ? VISIBLE.code : HIDDEN.code;
    }
}
