/**
 * 国际化工具函数
 */

// 移除Taro依赖，使用Web API
import { Language, i18nConfig } from './index';
import { locales } from './locales';

// 当前语言状态 - 固定为英语
let currentLanguage: Language = 'en-US';

/**
 * 获取当前语言
 */
export const getCurrentLanguage = (): Language => {
  return currentLanguage;
};

/**
 * 设置当前语言 - 固定为英语
 */
export const setCurrentLanguage = async (): Promise<void> => {
  // 始终使用英语
  currentLanguage = 'en-US';

  // 保存到本地存储
  try {
    localStorage.setItem(i18nConfig.storageKey, 'en-US');
  } catch (error) {
    console.error('Failed to save language to storage:', error);
  }
};

/**
 * 从本地存储初始化语言 - 固定为英语
 */
export const initLanguageFromStorage = async (): Promise<Language> => {
  // 始终返回英语，忽略本地存储
  currentLanguage = 'en-US';
  return currentLanguage;
};

/**
 * 获取嵌套对象的值
 */
const getNestedValue = (obj: any, path: string): string => {
  return path.split('.').reduce((current, key) => {
    return current && current[key] !== undefined ? current[key] : undefined;
  }, obj);
};

/**
 * 翻译函数
 * @param key 翻译键，支持嵌套路径，如 'common.confirm'
 * @param params 参数对象，用于字符串插值
 * @returns 翻译后的文本
 */
export const t = (key: string, params?: Record<string, string | number>): string => {
  const currentLocale = locales[currentLanguage];
  const fallbackLocale = locales[i18nConfig.fallbackLanguage];

  // 尝试从当前语言获取翻译
  let translation = getNestedValue(currentLocale, key);

  // 如果当前语言没有找到，尝试从回退语言获取
  if (translation === undefined && currentLanguage !== i18nConfig.fallbackLanguage) {
    translation = getNestedValue(fallbackLocale, key);
  }

  // 如果仍然没有找到，返回键名
  if (translation === undefined) {
    console.warn(`Translation not found for key: ${key}`);
    return key;
  }

  // 处理参数插值
  if (params && typeof translation === 'string') {
    return translation.replace(/\{\{(\w+)\}\}/g, (match, paramKey) => {
      return params[paramKey] !== undefined ? String(params[paramKey]) : match;
    });
  }

  return translation;
};

/**
 * 检测系统语言并设置 - 固定为英语
 */
export const detectAndSetSystemLanguage = async (): Promise<Language> => {
  // 始终返回英语，忽略系统语言检测
  currentLanguage = 'en-US';
  return 'en-US';
};

/**
 * 格式化数字（根据语言环境） - 固定为英语
 */
export const formatNumber = (num: number): string => {
  try {
    return new Intl.NumberFormat('en-US').format(num);
  } catch (error) {
    return num.toString();
  }
};

/**
 * 格式化日期（根据语言环境） - 固定为英语
 */
export const formatDate = (date: Date, options?: Intl.DateTimeFormatOptions): string => {
  try {
    const defaultOptions: Intl.DateTimeFormatOptions = {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
    };

    return new Intl.DateTimeFormat('en-US', options || defaultOptions).format(date);
  } catch (error) {
    return date.toLocaleDateString();
  }
};
