/**
 * i18n管理器
 * 处理应用级别的国际化设置，包括tabBar、导航栏标题等
 */

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

export class I18nManager {
  private static instance: I18nManager;

  public static getInstance(): I18nManager {
    if (!I18nManager.instance) {
      I18nManager.instance = new I18nManager();
    }
    return I18nManager.instance;
  }

  /**
   * 更新TabBar文本 (H5版本不需要实现)
   */
  public async updateTabBarTexts(): Promise<void> {
    // H5版本使用React Router，不需要更新TabBar
    console.log('TabBar texts updated for H5');
  }

  /**
   * 更新导航栏标题 (H5版本更新document.title)
   * @param pageKey 页面键名
   */
  public async updateNavigationBarTitle(pageKey?: string): Promise<void> {
    try {
      let title = '';

      // 根据页面设置不同的标题
      switch (pageKey) {
        case 'home':
          title = t('home.title');
          break;
        case 'friends-photo':
          title = t('friendsPhoto.title');
          break;
        case 'history':
          title = t('navigation.history');
          break;
        default:
          title = t('home.title'); // 默认标题
      }

      document.title = title;
    } catch (error) {
      console.warn('Failed to update navigation bar title:', error);
    }
  }

  /**
   * 初始化应用国际化设置
   */
  public async initializeApp(): Promise<void> {
    try {
      // 更新TabBar文本
      await this.updateTabBarTexts();

      // 更新当前页面标题 (H5版本根据路径判断)
      const pathname = window.location.pathname;
      let pageKey = '';

      if (pathname.includes('home') || pathname === '/') {
        pageKey = 'home';
      } else if (pathname.includes('friends-photo')) {
        pageKey = 'friends-photo';
      } else if (pathname.includes('history')) {
        pageKey = 'history';
      }

      await this.updateNavigationBarTitle(pageKey);
    } catch (error) {
      console.error('Failed to initialize app i18n:', error);
    }
  }

  /**
   * 语言切换时的处理
   */
  public async onLanguageChange(): Promise<void> {
    await this.initializeApp();
  }
}

// 导出单例实例
export const i18nManager = I18nManager.getInstance();
