import { getQueryMap } from "../utils/common";
import { msg } from "./msg";

import { WECHAT_REDIRECT_URL } from "../constants";
import { queryUserInfo } from "../service";

/**
 * 显式授权
 * @param redirectURL
 */
export const explicitAuth = async (redirectURL: string) => {
  const { sources = "", code = "" } = getQueryMap();
  const { APPID = "" } = (await msg()) || {};

  // * 是否显式授权状态位
  const isVisibleFLAG = sessionStorage.getItem("SNSAPI_USERINFO");
  // * 微信userINFO (包含了openid)
  const userINFO = JSON.parse(sessionStorage.getItem("SP_WX_USERINFO") || null);

  // * 须满足没有显式授权过
  if (code && isVisibleFLAG) {
    // 重置URL
    history.replaceState(
      {},
      document.title || "",
      location.href.split("code")[0].slice(0, -1)
    );

    return userINFO
      ? Promise.resolve({ code: 20000, data: userINFO, type: "userINFO" })
      : queryUserInfo(code, sources);
  } else {
    const targetURL = WECHAT_REDIRECT_URL.replace("APPID", APPID)
      .replace("REDIRECT_URI", encodeURIComponent(redirectURL))
      // snsapi_base: 静默授权 用来获取进入页面的用户的openid的， snsapi_userinfo: 用户点击授权
      .replace("SCOPE", "snsapi_userinfo")
      .replace("STATE", "");

    sessionStorage.setItem("SNSAPI_USERINFO", "1");

    window.location.replace(targetURL); //微信授权跳转

    return Promise.resolve({ code: -1, data: "" });
  }
};

export default {
  explicitAuth,
};
