package com.alibaba.rsocket.observability;

import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.PropertyKey;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * RSocket Error Code
 *
 * @author leijuan
 */
public class RsocketErrorCode {
    /**
     * bundle FQN
     */
    @NonNls
    private static final String BUNDLE_FQN = "rsocket.Messages";

    /**
     * resource bundle
     */
    private static final ResourceBundle ourBundle = ResourceBundle.getBundle(BUNDLE_FQN, new Locale("en", "US"));

    private RsocketErrorCode() {
    }

    /**
     * get value from resource bundle
     *
     * @param key    message key
     * @param params params,MessageFormat style
     * @return message value
     */
    public static String message(@PropertyKey(resourceBundle = BUNDLE_FQN) String key, Object... params) {
        String value;
        try {
            value = ourBundle.getString(key);
        } catch (MissingResourceException ignore) {
            value = "!!!" + key + "!!!";
        }
        if (params != null && params.length > 0 && value.indexOf('{') >= 0) {
            value = MessageFormat.format(value, params);
        }
        return key + ": " + value;
    }
}