
package net.northking.cctp.maven.analyse;

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

/**
 * 消息输出类
 *
 * @author 谢秀松
 * @since 1.0
 */
public final class Messages
{
  /**
   * 调试模式，默认false
   */
  private static final boolean DEBUG_LEVEL = true;
  /**
   * 资源文件
   */
  private static final String BUNDLE_NAME = "config.messages"; //$NON-NLS-1$

  /**
   * 资源对象
   */
  private static ResourceBundle resourceBundle;

  /**
   * 工具栏，隐藏构造函数
   */
  private Messages()
  {
  }

  /**
   * 获取资源文件对象
   *
   * @return 资源文件对象
   */
  private static ResourceBundle getResource()
  {
    if (resourceBundle == null)
    {
      if (Locale.SIMPLIFIED_CHINESE.equals(Locale.getDefault()))
      {
        resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME, Locale.SIMPLIFIED_CHINESE);
      } else
      {
        resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME, Locale.US);
      }

    }

    return resourceBundle;
  }

  /**
   * 获取提示信息
   *
   * @param key 消息关键字
   * @return 提示信息
   */
  public static String getMessage(final String key)
  {
    try
    {
      return getResource().getString(key);
    } catch (MissingResourceException e)
    {
      return '!' + key + '!';
    }
  }

  /**
   * 获取提示信息
   *
   * @param key       消息关键字
   * @param arguments 参数
   * @return 提示信息
   */
  public static String getMessage(final String key, final Object... arguments)
  {
    try
    {
      return MessageFormat.format(getResource().getString(key), arguments);
    } catch (MissingResourceException e)
    {
      return '!' + key + '!';
    }
  }

  /**
   * 日志输出
   *
   * @param key 消息关键字
   */
  public static void debug(final String key)
  {
    if (DEBUG_LEVEL)
    {
      System.out.println("Debug: " + getMessage(key));
    }
  }

  /**
   * 日志输出
   *
   * @param key       消息关键字
   * @param arguments 参数
   */
  public static void debug(final String key, final Object... arguments)
  {
    if (DEBUG_LEVEL)
    {
      System.out.println("Debug: " + getMessage(key, arguments));
    }
  }

  /**
   * 日志输出
   *
   * @param key 消息关键字
   */
  public static void info(final String key)
  {
    System.out.println("Info: " + getMessage(key));
  }

  /**
   * 日志输出
   *
   * @param key       消息关键字
   * @param arguments 参数
   */
  public static void info(final String key, final Object... arguments)
  {
    System.out.println("Info: " + getMessage(key, arguments));
  }

  /**
   * 日志输出
   *
   * @param key 消息关键字
   */
  public static void warn(final String key)
  {
    System.out.println("Warn: " + getMessage(key));
  }

  /**
   * 日志输出
   *
   * @param key       消息关键字
   * @param arguments 参数
   */
  public static void warn(final String key, final Object... arguments)
  {
    System.out.println("Warn: " + getMessage(key, arguments));
  }

  /**
   * 日志输出
   *
   * @param key 消息关键字
   */
  public static void error(final String key)
  {
    System.out.println("Error: " + getMessage(key));
  }

  /**
   * 日志输出
   *
   * @param key       消息关键字
   * @param arguments 参数
   */
  public static void error(final String key, final Object... arguments)
  {
    System.out.println("Error: " + getMessage(key, arguments));
  }

}
