import EnumRunTimePlatForm from '@/common/constants/runTimePlatform'

export type RunTimeData = {
  runTimePlatform: EnumRunTimePlatForm
}

export interface IRuntime {}

export abstract class RunTime {
  private _runTimeData!: RunTimeData
  constructor(runTimeData?: RunTimeData) {
    if (runTimeData) {
      this._runTimeData = runTimeData
    }
  }

  /**
   * 各个运行环境的全局宿主对象
   * 如浏览器环境就是window
   * 微信小程序环境就是wx
   */
  abstract get g(): any

  /**
   * 取运行时数据
   */
  get runTimeData(): RunTimeData {
    return this._runTimeData
  }

  /**
   * 设置运行时数据
   */
  set runTimeData(runTimeData: RunTimeData) {
    if (runTimeData && this._runTimeData !== runTimeData) {
      this._runTimeData = runTimeData
    }
  }

  /**
   * 运行平台
   */
  get runTimePlatform(): EnumRunTimePlatForm {
    return (this._runTimeData && this._runTimeData.runTimePlatform) || EnumRunTimePlatForm.web || ''
  }
}
