/* eslint-disable space-before-function-paren */
/* eslint-disable prettier/prettier */
/*
 * @Description: 支付微信h5, jsapi, 第三方收银台，跳转）
 * @Date: 2020-07-28 15:03:52
 * @LastEditors: guang.wu
 * @LastEditTime: 2023-01-30 15:43:12
 */

import cookies from '@/service/cookieStorage.service';
import localStorage from '@/service/localStorage.service';
import { queryStringify } from './utils.service';
import TMDConfig from '@/customize/tmd-config';
import { CHANNEL_TIANMEIDAI } from '@/customize/utils/config-type';

/**
 * payByWeixinJsapi
 * @description: 微信通过jsapi支付
 *               可以在微信浏览器调起支付
 * @param {type}
 * @return:
 */
function payByWeixinJsapi(info = {}, callback) {
  function onBridgeReady() {
    // eslint-disable-next-line no-undef
    WeixinJSBridge.invoke('getBrandWCPayRequest', info, function(res) {
      if (res.err_msg == 'get_brand_wcpay_request:ok') {
        // 使用以上方式判断前端返回,微信团队郑重提示：
        //res.err_msg将在用户支付成功后返回ok，但并不保证它绝对可靠。
        callback('ok');
      } else if (res.err_msg == 'get_brand_wcpay_request:cancel') {
        // 支付取消
        callback('cancel');
      } else {
        // 支付失败
        callback('fail');
      }
    });
  }
  if (typeof WeixinJSBridge == 'undefined') {
    if (document.addEventListener) {
      document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
      document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
      document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
  } else {
    onBridgeReady();
  }
}

/**
 * payByWeixinH5
 * @description: 微信通过H5支付
 *               可以在浏览器调起微信支付
 *               在羊小咩（信用钱包）app中调起微信支付，会先唤起微信，原来的页面会自动跳转到redirect_url设定的地址
 * @param {type}
 * @return:
 */
function payByWeixinH5(info) {
  if (!info.url) return;
  if (!info.params) {
    info.params = {};
  }
  const vccToken = localStorage.get('vccToken');
  const orderNo = cookies.get('orderNo')?.orderNo;
  info.params.isWxH5 = 1;
  info.params.vccToken = vccToken;
  info.params.orderNo = orderNo;
  info.params.isWx = true;
  const currentPath = window.location.origin + '/payWaiting?' + queryStringify(info.params);
  localStorage.set('inPay', true);
  const config = new TMDConfig();
  if (localStorage.get('vccChannel') === config.channelId.id) {
    window.location.replace(`${info.url}&redirect_uri=${currentPath}`);
  } else {
    const nextPage = document.createElement('a');
    nextPage.setAttribute('href', `${info.url}&redirect_url=${currentPath}`);
    nextPage.click();
  }
}

/**
 * payByALIH5
 * @description: 支付宝支付
 * @param {type}
 * @return:
 */
export function payByALIH5(info) {
  if (!info.url) return;

  const aliWrap = document.createElement('div');
  aliWrap.id = 'ALIWEB_WRAP';
  aliWrap.setAttribute('id', 'ALIWEB_WRAP');
  // 判断 只有天美贷才执行
  if (localStorage.get('vccChannel') === CHANNEL_TIANMEIDAI) {
    info.url = info.url.replace(
      '<form ',
      "<iframe src='' style='height: 1px; width: 1px;opacity: 0;' frameborder='0' name='frameName'></iframe><form target='frameName'"
    );
  }

  aliWrap.innerHTML = info.url;
  document.body.appendChild(aliWrap);
  document.forms[0].submit();
  setTimeout(() => {
    const ALIWEB_WRAP = document.getElementById('ALIWEB_WRAP');
    if (ALIWEB_WRAP != null) ALIWEB_WRAP.parentNode.removeChild(ALIWEB_WRAP);
  }, 5000);
}

/**
 * payByThirdPartyCashier
 * @description: 第三方收银台
 * @param {type}
 * @return:
 */
function payByThirdPartyCashier(info) {
  if (!info.url) return;
  if (info.params) {
    info.params.third = 1;
  } else {
    info.params = {
      third: 1
    };
  }
  const currentPath = encodeURIComponent(
    window.location.origin + '/payWaiting?' + queryStringify(info.params)
  );

  const nextPage = document.createElement('a');
  nextPage.setAttribute('href', `${info.url}&redirect_uri=${currentPath}`);
  nextPage.click();
  // window.location.href = `${info.url}&redirect_uri=${currentPath}`;
}

/**
 * @description: 支付方式判断， 返回promise
 *              NATIVE=原生扫码支付.,APP=ap支付,,JSAPI=公众号支付/小程序支付,,MWEB=H5支付.,MICROPAY=刷卡支付,默认JSAPI
 * @param {String} type 支付方式，THIRD -> 第三方，MWEB -> H5支付， JSAPI -> jsapi支付，默认支付方式，THIRD
 * @param {Object/String} payInfo 支付信息
 * @return {Promise} 回调
 */
export function payByWay(type = 'THIRD', payInfo, isXc = true) {
  return new Promise((resolve, reject) => {
    if (!isXc) {
      localStorage.set('payByThirdPartyCashierUrl', payInfo.url);
      // payByThirdPartyCashier(payInfo);
      reject();
      return;
    }
    if (type === 'JSAPI' && !payInfo.url) {
      payByWeixinJsapi(payInfo, function(e) {
        if (e === 'ok') {
          resolve();
        } else {
          reject();
        }
      });
    } else {
      if (payInfo.url.indexOf('tenpay') > -1) {
        payByWeixinH5(payInfo);
        reject();
      } else if (type === 'ALIWEB') {
        const config = new TMDConfig();
        if (localStorage.get('vccChannel') === config.channelId.id) {
          localStorage.set('payByThirdPartyCashierUrl', payInfo.url);
        }
        payByALIH5(payInfo);
        resolve();
      } else {
        payByThirdPartyCashier(payInfo);
        reject();
      }
      // resolve();
    }
  });
}
