package com.base.orbit.Exception;

import org.springframework.lang.Nullable;
import org.springframework.util.StringUtils;

import java.util.Locale;

/**
 * 错误码
 *
 * @author jhzhu
 * @date 2023-01-05
 */
public interface ErrorCode {

    /**
     * 获取错误码
     *
     * @return 错误码
     */
    String getCode();

    /**
     * 错误消息默认内容
     *
     * @return 错误消息默认内容
     */
    String getDefaultMsgContent();

    /**
     * 获取错误消息内容
     *
     * @return 错误消息内容
     */
    default String getErrorMessageContent() {
        return this.getErrorMessageContent(null, Locale.getDefault());
    }

    /**
     * 获取错误消息内容
     *
     * @param args 变量
     * @return 错误消息内容
     */
    default String getErrorMessageContent(@Nullable Object[] args) {
        return this.getErrorMessageContent(args, Locale.getDefault());
    }

    /**
     * 获取错误消息内容
     *
     * @param locale 语言上下文
     * @return 错误消息内容
     */
    default String getErrorMessageContent(Locale locale) {
        return this.getErrorMessageContent(null, locale);
    }

    /**
     * 获取错误消息内容
     *
     * @param args 变量
     * @param locale 语言上下文
     * @return 错误消息内容
     */
    default String getErrorMessageContent(@Nullable Object[] args, Locale locale) {
        if (!StringUtils.isEmpty(this.getDefaultMsgContent())) {
            return OrbitException.MESSAGE_SOURCE.getMessage(this.getCode(), args, this.getDefaultMsgContent(), locale);
        } else {
            return OrbitException.MESSAGE_SOURCE.getMessage(this.getCode(), args, locale);
        }
    }

}
