package com.corewing.app.util;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Locale;

/**
 * 国际化工具类
 * 提供便捷的静态方法获取国际化消息
 */
@Component
public class I18nUtil {

    private final MessageSource messageSource;

    private static I18nUtil instance;

    public I18nUtil(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    @PostConstruct
    public void init() {
        instance = this;
    }

    /**
     * 获取国际化消息
     *
     * @param key 消息key
     * @return 国际化消息
     */
    public static String getMessage(String key) {
        return getMessage(key, null);
    }

    /**
     * 获取国际化消息（带参数）
     *
     * @param key  消息key
     * @param args 参数数组
     * @return 国际化消息
     */
    public static String getMessage(String key, Object[] args) {
        try {
            Locale locale = LocaleContextHolder.getLocale();
            return instance.messageSource.getMessage(key, args, locale);
        } catch (Exception e) {
            // 如果获取失败，返回key本身
            return key;
        }
    }

    /**
     * 获取国际化消息（带单个参数）
     *
     * @param key 消息key
     * @param arg 参数
     * @return 国际化消息
     */
    public static String getMessage(String key, Object arg) {
        return getMessage(key, new Object[]{arg});
    }

    /**
     * 获取国际化消息（带两个参数）
     *
     * @param key  消息key
     * @param arg1 参数1
     * @param arg2 参数2
     * @return 国际化消息
     */
    public static String getMessage(String key, Object arg1, Object arg2) {
        return getMessage(key, new Object[]{arg1, arg2});
    }

    /**
     * 获取当前语言环境
     *
     * @return 当前Locale
     */
    public static Locale getCurrentLocale() {
        return LocaleContextHolder.getLocale();
    }
}
