/**
 * 国际化文案获取工具函数
 * 参考 AmountSummary 组件的实现方式，使用 useEngineContext 获取语言设置
 * 
 * @example
 * ```typescript
 * import { useGetText } from './utils';
 * import locales from './locales';
 * 
 * const MyComponent = () => {
 *   const { getText, getTextFunc } = useGetText(locales);
 *   
 *   // 获取字符串文案
 *   const title = getText('component.title', 'Default Title');
 *   
 *   // 获取函数类型文案
 *   const formatFunc = getTextFunc('component.format');
 *   const formattedText = typeof formatFunc === 'function' 
 *     ? formatFunc(arg1, arg2) 
 *     : 'Default Text';
 *     
 *   return <div>{title}</div>;
 * };
 * ```
 */

import useEngineContext from "../../../hooks/useEngineContext";
// 导入全局 locales 作为回退
// import { locales } from '@pisell/utils';

// 支持的语言类型

// 本地化文案对象类型

// getText 函数返回类型

// Engine Context 类型定义

/**
 * 使用 useEngineContext 创建本地化文案获取函数的 Hook
 * @param locales - 本地化文案对象
 * @returns getText 和 getTextFunc 函数
 */
export var useGetText = function useGetText(locales) {
  var context = useEngineContext();

  /**
   * 获取当前语言
   * 参考 AmountSummary 组件的实现方式
   */
  var getCurrentLanguage = function getCurrentLanguage() {
    var _context$appHelper, _context$appHelper$ge, _context$appHelper$ge2, _context$appHelper2;
    return ((_context$appHelper = context.appHelper) === null || _context$appHelper === void 0 || (_context$appHelper = _context$appHelper.utils) === null || _context$appHelper === void 0 || (_context$appHelper$ge = _context$appHelper.getApp) === null || _context$appHelper$ge === void 0 || (_context$appHelper$ge = _context$appHelper$ge.call(_context$appHelper)) === null || _context$appHelper$ge === void 0 || (_context$appHelper$ge = _context$appHelper$ge.locales) === null || _context$appHelper$ge === void 0 || (_context$appHelper$ge2 = _context$appHelper$ge.getLocale) === null || _context$appHelper$ge2 === void 0 ? void 0 : _context$appHelper$ge2.call(_context$appHelper$ge)) || ((_context$appHelper2 = context.appHelper) === null || _context$appHelper2 === void 0 || (_context$appHelper2 = _context$appHelper2.utils) === null || _context$appHelper2 === void 0 || (_context$appHelper2 = _context$appHelper2.storage) === null || _context$appHelper2 === void 0 ? void 0 : _context$appHelper2.get('umi_locale')) || 'zh-CN';
  };

  /**
   * 获取字符串类型的文案
   * @param key - 文案键名
   * @param fallback - 回退文案
   * @returns 本地化文案字符串
   */
  var getText = function getText(key, fallback) {
    var _locales;
    var currentLang = getCurrentLanguage();
    var localText = (_locales = locales[currentLang]) === null || _locales === void 0 ? void 0 : _locales[key];
    if (typeof localText === 'string') {
      return localText;
    }

    // 回退到全局语言包（如果可用）
    // const globalText = locales?.getText(key);
    // if (globalText) {
    //   return globalText;
    // }

    // 最终回退到默认值
    return fallback || '';
  };

  /**
   * 获取任意类型的文案（包括函数类型）
   * @param key - 文案键名
   * @returns 本地化文案（可能是字符串或函数）
   */
  var getTextFunc = function getTextFunc(key) {
    var _locales2;
    var currentLang = getCurrentLanguage();
    var localText = (_locales2 = locales[currentLang]) === null || _locales2 === void 0 ? void 0 : _locales2[key];
    return localText;
  };
  return {
    getText: getText,
    getTextFunc: getTextFunc,
    getCurrentLanguage: getCurrentLanguage
  };
};

/**
 * 创建本地化文案获取函数（非 Hook 版本，保持向后兼容）
 * @param locales - 本地化文案对象
 * @returns getText 和 getTextFunc 函数
 * @deprecated 推荐使用 useGetText Hook 版本
 */
export var createGetText = function createGetText(locales) {
  // 获取当前语言的函数（非 Hook 版本）
  var getCurrentLanguage = function getCurrentLanguage() {
    // 获取当前语言，优先从 localStorage 或其他来源获取
    return (typeof window !== 'undefined' ? localStorage.getItem('umi_locale') : null) || 'zh-CN';
  };

  /**
   * 获取字符串类型的文案
   * @param key - 文案键名
   * @param fallback - 回退文案
   * @returns 本地化文案字符串
   */
  var getText = function getText(key, fallback) {
    var _locales3;
    var currentLang = getCurrentLanguage();
    var localText = (_locales3 = locales[currentLang]) === null || _locales3 === void 0 ? void 0 : _locales3[key];
    if (typeof localText === 'string') {
      return localText;
    }

    // 回退到默认值
    return fallback || '';
  };

  /**
   * 获取任意类型的文案（包括函数类型）
   * @param key - 文案键名
   * @returns 本地化文案（可能是字符串或函数）
   */
  var getTextFunc = function getTextFunc(key) {
    var _locales4;
    var currentLang = getCurrentLanguage();
    var localText = (_locales4 = locales[currentLang]) === null || _locales4 === void 0 ? void 0 : _locales4[key];
    return localText;
  };
  return {
    getText: getText,
    getTextFunc: getTextFunc,
    getCurrentLanguage: getCurrentLanguage
  };
};

/**
 * 默认导出：直接创建一个通用的 getText 函数工厂
 */
export default createGetText;