import { KIP_API_CODE } from '@/common/js/config';
import {
  kipCheckToken,
  kipGetNewAccessTokenByRefreshToken,
} from '@/utils/api-kip';
import KipCacheTool from '@/utils/kip-cache-tool';
import log from '@/utils/log';
import MemberCacheTool from '@/utils/member-cache-tool';
import uni from '@/utils/uniHooks';
import { Toast } from 'vant';

export default {
  methods: {
    async checkIsLogin(callback) {
      // 判断用户是否登录
      // 如果登录
      // 未登录，或者是首次登录
      const kipAccessToken = uni.getStorageSync('kipAccessToken');
      if (!kipAccessToken) {
        // 如果用户不选择登录，则不走登录逻辑
        await this.$router.replace({
          path: 'login',
        });
        return;
      }
      // 用户二次登录，本地存在 kipAccessToken 检查 token 是否需要登录
      const [stopCallBack] = await this.checkKipToken(kipAccessToken);
      // console.log(30, stopCallBack);
      if (stopCallBack) {
        // console.log(return stopCallBack();)
        // console.log(32, stopCallBack);
        stopCallBack();
        return;
      }
      if (callback) {
        callback();
      }
    },
    checkKipToken(kipAccessToken) {
      // debugger;
      return new Promise(async (resolve) => {
        try {
          const resp = await kipCheckToken(kipAccessToken);
          if (resp && resp.statusCode === '401') {
            log.info(
              `access_token已过期，使用refresh_token刷新access_token，如果refresh_token过期则删除所有数据`
            );
            const kipRefreshToken = KipCacheTool.getKipRefreshToken();
            const result = await kipGetNewAccessTokenByRefreshToken(
              kipRefreshToken
            );
            if (
              result &&
              result.code === '000000' &&
              result.data.access_token
            ) {
              KipCacheTool.setKipToken(result.data.access_token);
              log.info(
                `refreshToken获取成功，这是新的token:`,
                result.data.access_token
              );
              resolve([]);
              return;
            }
            if (result && result.code !== KIP_API_CODE.REFRESH_TOKEN_EXPIRED) {
              Toast({
                message: result.message,
                duration: 2000,
              });
            }
            resolve([this.toLogin]);
            return;
          }
          resolve([]);
        } catch (err) {
          resolve([this.toLogin]);
        }
      });
    },
    toLogin() {
      // debugger;
      console.warn('===>清除所有缓存1');
      log.info(`清除所有缓存1`);
      this.cleanAll();

      this.$router.replace({
        path: 'login',
      });
    },
    cleanAll() {
      // 清除所有用户信息
      KipCacheTool.cleanKipCache();
      MemberCacheTool.cleanMemberCache(this);
    },
  },
};
