import wx from "weixin-js-sdk";
import {jsapiToken} from "@/api/pay";
import {useUserStore} from "@/store/modules/user";
import {showToast} from "vant";

export const getWxConfig = (url) => {
  const user = useUserStore()

  return new Promise((resolve, reject) => {
    if (user.getWxConfig) {
      resolve(user.getWxConfig)
    } else {
      jsapiToken({
        url: url
      }).then(res => {
        user.setWxConfig(res)
        resolve(user.getWxConfig)
      })
    }
  })
}

export const getLocation = (params, callback) => {
  getWxConfig(params.url).then(res => {
    wx.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: res.appId, // 必填，公众号的唯一标识
      timestamp: res.timestamp, // 必填，生成签名的时间戳
      nonceStr: res.nonceStr, // 必填，生成签名的随机串
      signature: res.signature, // 必填，签名
      jsApiList: ['checkJsApi', 'getLocation'] // 必填，需要使用的JS接口列表
    })
    wx.ready(() => {
      wx.checkJsApi({
        jsApiList: ['getLocation'],
        success: function () {
          wx.getLocation({
            type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
            success: (res) => {
              console.log('res11111')
              callback(res)
            },
            fail: (res) => {
              // showToast('定位失败 -- > ' + JSON.stringify(res))
              console.error('定位失败')
            },
            cancel: function (res) {
              console.error(res)
            },
          });
        },
        fail: function (res) {
          showToast('fail -- > ' + JSON.stringify(res))
          console.error(res)
        }
      })
    })

    wx.error(err => {
      showToast('err -- > ' + JSON.stringify(err))
      console.error(err)
    })
  })
}

export const openLocation = (params) => {
  getWxConfig(params.url).then(res => {
    wx.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: res.appId, // 必填，公众号的唯一标识
      timestamp: res.timestamp, // 必填，生成签名的时间戳
      nonceStr: res.nonceStr, // 必填，生成签名的随机串
      signature: res.signature, // 必填，签名
      jsApiList: ['checkJsApi', 'openLocation'] // 必填，需要使用的JS接口列表
    })
    wx.ready(() => {
      wx.checkJsApi({
        jsApiList: ['openLocation'],
        success: function () {
          wx.openLocation({
            latitude: params.latitude, // 纬度，浮点数，范围为90 ~ -90
            longitude: params.longitude, // 经度，浮点数，范围为180 ~ -180。
            name: '', // 位置名
            address: '', // 地址详情说明
            scale: 1, // 地图缩放级别,整型值,范围从1~28。默认为最大
            infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
          });
        },
        fail: function (res) {
          console.error(res)
        }
      })
    })

    wx.error(err => {
      console.error(err)
    })
  })
}