// import QueryString from 'qs';
import { useUserStore } from '/@/store/modules/user';
import { RouteLocationNormalized } from 'vue-router';
import { useMessage } from '../web/useMessage';
import { AUTO_LOGIN_URL_QUERY } from '/@/router/constant';
import { AxiosError } from 'axios';

/** 自动登录功能的Hook，该Hook是为了部署在同一局域网内的多套系统之间能够无缝切换 */
export function useAutoLogin() {
  // const userStore = useUserStore();
  /** 获取自动登录的url */
  // function getUrl(baseUrl: string, extraQuery: Record<string, string> = {}) {
  //   const qs = QueryString.stringify({
  //     [AUTO_LOGIN_URL_QUERY.key]: AUTO_LOGIN_URL_QUERY.val,
  //     realname: userStore.getUserInfo.realname,
  //     workNo: userStore.getUserInfo.workNo,
  //     ...extraQuery,
  //   });
  //   return `${baseUrl}?${qs}`;
  // }

  /** 启用自动登录功能来跳转新的页面 */
  // function open(url: string, target?: string) {
  //   window.open(getUrl(url), target);
  // }

  /** 判断当前路由是否需要自动登录，本方法是同步方法，可以用于事先判断 */
  function validateRoute(route: RouteLocationNormalized) {
    if (route.query && route.query[AUTO_LOGIN_URL_QUERY.key]) {
      return true;
    }

    return false;
  }

  /**
   * 用在路由守卫里，执行自动登录的逻辑，如果存在符合自动登录标准的query则执行自动登录，返回是否自动登录
   *
   * 该方法需要修改query
   * */
  async function doAutoLogin(route: RouteLocationNormalized): Promise<void> {
    if (!validateRoute(route)) return;

    const params = {
      zbToken: route.query[AUTO_LOGIN_URL_QUERY.key] as string,
      checkKey: new Date().getTime(),
    };
    delete route.query[AUTO_LOGIN_URL_QUERY.key];
    const userStore = useUserStore();
    try {
      await userStore.autoLogin({
        ...params,
        goHome: true,
      });
      // delete route.query['username'];
      return;
    } catch (e) {
      const message = useMessage().createMessage;
      message.error((e as AxiosError).message);
      throw e;
    }
  }

  return {
    /** 启用单点登录功能来跳转新的页面，参数与window.open一致 */
    // open,
    /** 用在跳转到的页面上，执行单点登录的逻辑 */
    doAutoLogin,
    /** 获取自动登录的url */
    // getUrl,
    /** 判断当前路由是否需要自动登录，本方法是同步方法，可以用于事先判断 */
    validateRoute,
  };
}
