import { getClientHello, getClientAuth } from 'services/ukeyAuth.js'
import { getLoginRandom, trxLogin, offlineToken } from 'services/trxLogin.js'
import Cookies from 'js-cookie'
import { ElMessage } from 'element-plus'
import { getTrxToken } from 'utils/auth'
const state = {}
const mutations = {}
const actions = {
  // 登录
  Login({ commit }, password) {
    return new Promise((resolve, reject) => {
      // 调用 ukey 获取 clientHello
      console.log('执行 store.dispatch(ukey/Login)开始,传参为password:', password)
      getClientHello(password).then(checkRes => {
        console.log('调用 ukey getClientHello 方法,接口返回结果为:', checkRes)
        if (checkRes.result !== 0) {
          console.log('调用 ukey getClientHello 方法失败,接口返回结果为:', checkRes)
          Cookies.remove('ngx_cookie')
          ElMessage({ message: checkRes.message, type: 'error' })
          resolve({
            success: false
          })
        }
        const clientHello = checkRes.clientHello
        console.log('clientHello:', clientHello)
        Cookies.set('ngx_cookie', clientHello)
        // 调用天融信单点登录获取 serverHello
        getLoginRandom(clientHello)
          .then(randomRes => {
            console.log('调用 getLoginRandom 方法,接口返回结果为:', randomRes)
            if (!randomRes.success) {
              console.log('调用 getLoginRandom 方法失败,接口返回结果为:', randomRes)
              resolve({
                success: false
              })
              return
            }
            const serverHello = randomRes.data
            console.log('serverHello:', serverHello)
            // 调用 ukey 获取 ClientAuth
            getClientAuth(password, serverHello, clientHello)
              .then(authRes => {
                console.log('调用 ukey getClientAuth 方法,接口返回结果为:', authRes)
                // 暂未用到
                // eslint-disable-next-line @typescript-eslint/no-unused-vars
                const ClientAuth = authRes.clientAuth
                if (authRes.result !== 0) {
                  console.log('调用 ukey getClientAuth 方法失败,接口返回结果为:', authRes)
                  ElMessage({ message: authRes.message, type: 'error' })
                  resolve({
                    success: false
                  })
                  return
                }
                const loginName = 'key'
                trxLogin({
                  loginName,
                  passwd: password,
                  clientHello, // 其实是接口文档里面的 cookie
                  serverHello: ClientAuth
                }).then(tokenRes => {
                  console.log('调用 trxLogin 方法,接口返回结果为:', tokenRes)
                  if (!tokenRes.success) {
                    console.log('调用 trxLogin 方法失败,接口返回结果为:', tokenRes)
                    resolve({
                      success: false
                    })
                    return
                  }
                  resolve(tokenRes)
                  return
                })
              })
              .catch(err => {
                console.log('调用 ukey getClientAuth 方法 [catch] ,接口返回结果为:', err)
                reject(err)
              })
          })
          .catch(err => {
            console.log('调用 getLoginRandom 方法 [catch] ,接口返回结果为:', err)
            reject(err)
          })
      })
    })
  },
  // 退出系统
  Logout() {
    return new Promise((resolve, reject) => {
      // 调用天融信单点退出系统
      console.log('开始调用天融信 offlineToken')
      const trxToken = getTrxToken()
      if (!trxToken) {
        console.log('调用天融信登出接口,没有获取到 trxToken')
        resolve({
          success: false
        })
        return
      }
      offlineToken(trxToken).then(
        res => {
          resolve(res)
        },
        err => {
          reject(err)
        }
      )
    })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
