import { loginMp } from '../../mp-login/mp-login';
import { LoginMpType } from '../../mp-login/types';

import { ErrorCode } from '../types';

import type { IInterceptor } from '../types';


/**
 * 处理小程序登录
 */
export class MpLoginInterceptor implements IInterceptor {
  // 要登录的小程序appid
  public appId = '';
  // 登录的平台类型
  public loginMpType: LoginMpType = LoginMpType.LoginMpWeixin;

  public options: {
    getGlobalEBus: (() => any),
    showLoadingWhenLoginInMp?: boolean;
    isRedirectAfterLogin?: boolean;
    notRefreshInMp?: boolean;
    qqAppIdInWxMini?: string;
  } = {
      getGlobalEBus: () => {},
      showLoadingWhenLoginInMp: false,
      isRedirectAfterLogin: false,
      notRefreshInMp: false,
      qqAppIdInWxMini: '',
    };

  async interceptor(param: any, extra: any): Promise<[boolean, any]> {
    if (param.data?.r === ErrorCode.NeedLogin) {
      // 后台换code的cgi也是返回100000，要排除这种情况
      if (extra.url.indexOf('&code=') === -1 && extra.url.indexOf('&extplat_extra=') === -1) {
        await loginMp({
          url: extra.url,
          getGlobalEBus: this.options.getGlobalEBus,
          showLoadingWhenLoginInMp: this.options.showLoadingWhenLoginInMp,
          isRedirectAfterLogin: this.options.isRedirectAfterLogin,
          notRefreshInMp: this.options.notRefreshInMp,
          qqAppIdInWxMini: this.options.qqAppIdInWxMini,
        });
      }
    }
    return [false, param];
  }
}
