import OST from "orcrist-request";
import { traceLog } from "../utils/traceLog";
import { getQueryMap, Toast } from "../utils/common";

const OST_REQ: any = OST;

export const queryWechatAppMSG = (sources) => {
  return OST_REQ.request(`/api/trading-product/merchant/wechat/${sources}`, {
    method: "GET",
  });
};

export const queryOpenID = (code, sources = "") => {
  return OST_REQ.request("/api/usercenter/wechat/get_openId", {
    method: "POST",
    body: {
      code,
      // ! 测试环境 使用π健康渠道号
      // ! 问题: 渠道号1100110101在用户中心配置了两个公众号，生产环境为广州，测试环境为π健康
      // ! 处理方式：测试环境做兼容，在无source模式下微信禁止异常访问页面，测试环境使用100000000渠道号指向π健康
      // ! TODO: 移除用户中心配置，更换测试渠道号为1000000000，统一接入测试环境验证标准
      source: sources === "1000000000" ? "1100110101" : sources,
    },
  })
    .then(({ success, data }) => {
      if (success && data) {
        sessionStorage.setItem("SP_WX_OPENID", data);
        return Promise.resolve({ code: 20000, data, type: "openID" });
      } else {
        Toast(`系统异常，获取微信信息异常，可尝试重新进入 (CODE: 60002)`, 3);
        return Promise.resolve({ code: -1, data: "", type: "openID" });
      }
    })
    .catch((err) => {
      traceLog({
        log: encodeURIComponent(
          `[ GetOpenIDService ] Error Code: 500. ${err.message}`
        ),
      });
      Toast("网络异常，请重新进入页面", 3);
      throw new Error(err.message);
    });
};

/**
 * 获取微信用户信息
 * @param code
 * @param openid
 * @param source
 */
export const queryUserInfo = (code, source) => {
  return OST_REQ.request(`/api/wecahtmanagercenter/wechat/user/get_user_info`, {
    method: "POST",
    body: {
      code,
      // openid,
      source: source === "1000000000" ? "1100110101" : source,
    },
  })
    .then(({ success, data }) => {
      // 清除显式授权标志位
      sessionStorage.removeItem("SNSAPI_USERINFO");

      if (success && data) {
        sessionStorage.setItem("SP_WX_USERINFO", JSON.stringify(data));
        sessionStorage.setItem("SP_WX_OPENID", data.openid);

        return Promise.resolve({ code: 20000, data, type: "userINFO" });
      } else {
        // 异常情况，清除显式授权标志位，规避获取冗余问题
        sessionStorage.removeItem("SNSAPI_USERINFO");

        Toast(`系统异常，获取微信信息异常，可尝试重新进入 (CODE: 60005)`, 3);
        return Promise.resolve({ code: -1, data: "", type: "userINFO" });
      }
    })
    .catch((err) => {
      // 清除显式授权标志位
      sessionStorage.removeItem("SNSAPI_USERINFO");

      traceLog({
        log: encodeURIComponent(
          `[ GetOpenIDService ] Error Code: 500. ${err.message}`
        ),
      });

      Toast("网络异常，请重新进入页面", 3);
      throw new Error(err.message);
    });
};

export default {
  queryOpenID,
  queryWechatAppMSG,
  queryUserInfo,
};
