import { UIContext } from "@ohos.arkui.UIContext";
import common from "@ohos.app.ability.common";
import { window } from "@kit.ArkUI";

/**
 * @file Context 获取工具
 * @author JunBin.Yang
 */

export class ContextUtil {
  private static context: common.UIAbilityContext;

  /**
   * 在 UIAbility 的 onCreate 方法中获取 UIAbilityContext
   */
  static init(context: common.UIAbilityContext) {
    ContextUtil.context = context;
  }

  /**
   * 获取 UIAbility 组件的上下文
   * @returns {common.UIAbilityContext}
   */
  static getUIAbilityCtx(): common.UIAbilityContext {
    return ContextUtil.context
  }

  /**
   * 获取 UIContext
   * @param {window.Window} win 获取 UIContext 的目标窗口
   * @returns {UIContext}
   */
  static getUICtx(win?: window.Window): UIContext {
    if(!win) win = ContextUtil.context.windowStage.getMainWindowSync();
    return win.getUIContext();
  }

  /**
   * 获取应用级别的上下文的能力
   * @returns {common.ApplicationContext}
   */
  static getAppCtx(): common.ApplicationContext {
    return ContextUtil.context.getApplicationContext();
  }

  /**
   * 获得当前元能力的 Context
   * @returns {common.Context | undefined} hostContext;获取失败返回 undefined
   */
  static getHostCtx(): common.Context | undefined {
    return ContextUtil.getUICtx().getHostContext();
  }
}