import Utils = require('./utils/index');
import Object_ = require('./apass/object_');

declare class HG {
  object: Object_;
  utils: Utils;

  constructor(logger: any);

  setLogger(logger: any): Promise<void>;

  /**
   * 运行函数
   * @param {*} fn 
   * @returns 
   */
  timeRun<T = any>(fn?: () => Promise<T> | T): Promise<T>;

  /**
   * 线程睡眠
   * @param {*} time 毫秒
   * @returns 
   */
  sleep(time?: number): Promise<void>;

  /**
   * 时间计划-记录
   */
  newTime(): void;

  /**
   * 时间计划-打印耗时
   */
  printTime(): void;

  /**
   * 统一网络请求(使用axios)
   * @param {*} config 
   * @returns 
   */
  request<T = any>(config: any): Promise<T>;

  /**
   * 直接调用axios
   * @param {*} config 
   * @returns 
   */
  axios(config: any): any;

  /**
   * 生成多语言对象(将开放平台返回的多语言对象转换为application.constants.type.Multilingual)
   * @param {*} zh 
   * @param {*} en 
   * @returns 
   */
  toMultilingualByOpenPlatform(zh: any, en: any): any;

  /**
   * 从多语言对象中获取中文
   * @param {*} textArr 
   * @returns 
   */
  toTextByMultilingual(textArr: any[]): string;

  /**
   * 从JSON中根据路径获取值
   * @param {*} obj 
   * @param {*} path 
   * @param {*} defaultValue 
   * @returns 
   */
  toValue(obj: any, path: string, defaultValue?: any): any;

  listFind<T = any>(list: T[], key: string, target: any, defValue?: any): T | any;

  listMap<T = any>(list: T[], key: string): any[];

  textToFloat(textAmount: string, defValue?: number): number;

  log(...arg: any[]): void;

  log4(...arg: any[]): void;

  log8(...arg: any[]): void;

  logm(space: number, ...arg: any[]): void;

  error(...arg: any[]): void;

  warn(...arg: any[]): void;
}

declare namespace HG { }

export = HG;
