const appword = 'aKd20dbGdFvmuwrt' // 固定值

window.onload = function () {
  // vant.Toast.loading({
  // 	message: '加载中...',
  // 	forbidClick: true,
  // 	loadingType: 'spinner',
  // });
  // if(!localStorage.getItem('token')){
  if (!gemhoUtil.getCookie('token')) {
    getUserInfo()
  }
}

function getUserInfo() {
  vant.Toast.loading({
    message: '授权中...',
    forbidClick: true,
    loadingType: 'spinner',
  })
  lightAppJssdk.user.getUserInfoWithEncryptedParamByAppId({
    appId: 'gqyjglptxiefn', //"gqyjglptxiefn", // 接入方在成功创建应用后自动生成
    success: async (data) => {
      if (data == '未登录') onLoginApp()
      else {
        // 2025-1-14 新增逻辑：获取用户票据，用于后续接口传参使用
        const ticketInfo = await getTicket()
        if (ticketInfo.ticket) {
          gemhoUtil.setCookie('ticket', ticketInfo.ticket)
        } else {
          vant.Dialog.alert({
            title: '信息提示',
            message: '未获取到用户票据信息',
          })
          return
        }
        if (typeof data == 'string') data = JSON.parse(data)

        // console.log('用户授权请求成功的数据', data)
        // 对于该方法的返回结果,需要进行两步解密才能得到明文用户信息,
        // 先对返回结果进行sm2解密,需要用到 接入方在创建应用时,选择应用的加密方式为sm2,并成功创建应用后,拿到的应用私钥来进行解密
        const sm2_privateKey =
          '145e8920d0ec9b60eaaa73a208e711a68e8aa614b786e45d3eb7eca850ba7843'
        let sm2_encrypt_result = data.data
        let sm2_decrypt_result = sm2_Decrypt(sm2_encrypt_result, sm2_privateKey)

        if (typeof sm2_decrypt_result == 'string')
          sm2_decrypt_result = JSON.parse(sm2_decrypt_result)

        // 其次,对sm2解密后的结果进行 aes解密
        // aes解密需要用到 appword , 为固定值,使用示例代码中的即可
        let aes_encrypt_result = sm2_decrypt_result.data
        let aes_decrypt_result = aes_Decrypt(aes_encrypt_result, appword)
        if (!aes_decrypt_result) {
          // console.log('授权用户信息为空')
          return
        }
        let tempResult = JSON.parse(aes_decrypt_result)
        // console.log('授权用户信息', tempResult)
        let reqParammm = {
          sex: tempResult.sex,
          mobile: tempResult.mobile,
          name: tempResult.name,
          loginname: tempResult.loginname,
          // sex: 1,//aes_decrypt_result.sex,
          // mobile: '18368232323',//aes_decrypt_result.mobile,
          // name: '123',// aes_decrypt_result.name,
          // loginname: 'zjb'// aes_decrypt_result.loginname
        }
        // 请求获取高区应急后台真是token，传参，授权获取的用户信息
        http2.post(
          {
            serviceId: 'gqyjglptbind',
            interfacePublicKey:
              '0450567ffc64139658baa28c5c9bc0415200b476baa3bcc3f9dc9dbbf8dbcff2fb5e93319127685469c84784d235220c0347e695fbf66c5ffede33e645bea8b3f0',
            interfacePrivateKey:
              '00b92f5f2a7c40cb07d225f2e90df9b8b23569658e4f9e04dd0a4bf4a5b374063b',
            reqParams: reqParammm,
          },
          function (res) {
            if (res) {
              // console.log('sdk2用户信息绑定接口回调数据', JSON.parse(res))
              var result = JSON.parse(res)
              // 存储后台返回token存储本地localstorage
              // localStorage.setItem('token', result.token)
              gemhoUtil.setCookie('token', result.token, 1) // 存储1天后过期
            }
            vant.Toast.clear()
          }
        )
      }
    },
    fail: function (data) {},
  })
}

/**
 * 获取用户票据
 */
function getTicket() {
  return new Promise((resolve, reject) => {
    lightAppJssdk.user.getTicketWithoutDialog({
      success: function (res) {
        //成功回调
        console.log(JSON.stringify(res) + 1)
        var jsonData = JSON.parse(res)
        if (jsonData.retcode == '000000') {
          var dataValueObj = JSON.parse(jsonData.data)
          // var ticket = dataValueObj.ticket //解析出用户票据信息
          // userType = dataValueObj.usertype //解析保存用户类型（个人法人）
          // gemhoUtil.setCookie('ticket', ticket)
          resolve(dataValueObj) // 成功时调用 外层直接通过.ticket拿到票据值
        } else {
          resolve(jsonData) // 未获取到票据时，则直接返回响应对象，外层做逻辑处理
        }
      },
      fail: function (res) {
        //错误返回
        console.log(JSON.stringify(res))
        resolve(res) // 成功时调用
      },
    })
  })
}

/**
 * 使用jssdk调用登录页面
 */
function onLoginApp() {
  lightAppJssdk.user.loginapp({
    success: function (data) {
      if (data == '未登录') {
        //取消登录或登录失败，关闭页面
        oncloseWindow()
      } else {
        getUserInfo()
      }
    },
    fail: function (data) {
      //关闭页面
      oncloseWindow()
    },
  })
}

/**
 * 关闭容器
 */
function oncloseWindow() {
  lightAppJssdk.navigation.close({
    success: function (data) {},
    fail: function (data) {},
  })
}

// aes解密
function aes_Decrypt(word, key) {
  var key = CryptoJS.enc.Utf8.parse(key) //转为128bit
  var srcs = CryptoJS.enc.Hex.parse(word) //转为16进制
  var str = CryptoJS.enc.Base64.stringify(srcs) //变为Base64编码的字符串
  var decrypt = CryptoJS.AES.decrypt(str, key, {
    mode: CryptoJS.mode.ECB,
    spadding: CryptoJS.pad.Pkcs7,
  })
  return decrypt.toString(CryptoJS.enc.Utf8)
}

// sm2解密,需要创建加密应用时的私钥
function sm2_Decrypt(word, key) {
  return SM.decrypt(word, key)
}
