import Bridge from '../manager/BridgeManager'
import { BridgeParams } from '../types/type'
import { CoolinkLoginStatus, CoolinkRetOpenId, CoolinkRetAccessToken, CoolinkRetUserInfo } from './type'
import mpWeb from './MpWeb';

class AccountModule {
  private static instance: AccountModule;

  public static getModule(): AccountModule {
    if (this.instance == null) {
      this.instance = new AccountModule()
    }
    return AccountModule.instance
  }
  
  public isLogin() : Promise<CoolinkLoginStatus> {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'isLogin',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public startLogin() : void {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'startLogin',
      params: {}
    };
    mpWeb.callNative(bridgeParams);
    return;
  }

  public getUserOpenID() : Promise<CoolinkRetOpenId> {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'getUserOpenID',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public getAccessToken() : Promise<CoolinkRetAccessToken> {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'getAccessToken',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public getUserInfo() : Promise<CoolinkRetUserInfo> {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'getUserInfo',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }

  public registerUserChanged() : Promise<any> {
    let bridgeParams : BridgeParams = {
      module: 'account',
      method: 'registerUserChanged',
      params: {}
    };
    return mpWeb.callNative(bridgeParams);
  }
}

export default AccountModule;
