import Bridge from '../manager/BridgeManager'
import { BridgeParams } from '../types/type'
import { CoolinkAppInfo, CoolinkSystemInfo, CoolinkResPath } from './type'
import versionManager from './versionManager';
import mpWeb from './MpWeb';

class BaseInfoModule {

  private static instance: BaseInfoModule;
  private static initFlag: boolean = false;

  public static getModule(): BaseInfoModule {
    if (this.instance == null) {
      this.instance = new BaseInfoModule()
    }
    return BaseInfoModule.instance
  }

  public initSdk() : void {
    if (!BaseInfoModule.initFlag) {
      BaseInfoModule.initFlag = true;
      this.getAppInfo()
        .then((res) => {
          let frameworkVersion = res.frameworkVersion;
          versionManager.setCurrApiVersion(frameworkVersion);
        });
    }
  }

  public getAppInfo(): Promise<CoolinkAppInfo> {
    let bridgeParams : BridgeParams = {
      module: 'baseinfo',
      method: 'getAppInfo',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public getSystemInfo(): Promise<CoolinkSystemInfo> {
    let bridgeParams : BridgeParams = {
      module: 'baseinfo',
      method: 'getSystemInfo',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public getResourcePath(): Promise<CoolinkResPath> {
    let bridgeParams : BridgeParams = {
      module: 'baseinfo',
      method: 'getResourcePath',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

}

export default BaseInfoModule;

