import * as dd from 'dingtalk-jsapi'
import router from '../router'
import axios from 'axios'
import qs from 'qs'
var instance = axios.create()
const BASE_URL = process.env.VUE_APP_API_URL

// 封装instance请求拦截
instance.interceptors.response.use(res => {
  return Promise.resolve(res)
}, err => {
  return new Promise((resolve, reject) => {
    if (err && err.response.status === 401 && err.response.data.code === 401) {
      refreshToken()
    } else if (err && err.response.status === 426 && err.response.data.code === 1) {
      getToken().then(res => {
        if (res === 40003) {
          router.push({
            path: '/noPermission'
          })
        } else {
          resolve('ok')
        }
      })
    }
  })
})

function ispermission () {
  return new Promise((resolve, reject) => {
    // 获取用户的临时授权码
    dd.runtime.permission.requestAuthCode({
      corpId: localStorage.getItem('orgId'), // 企业id
      onSuccess: function (info) {
        let senddate = qs.stringify({
          code: info.code,
          orgId: localStorage.getItem('orgId')
        })
        // 获取用户名和密码
        return instance.post(`${BASE_URL}/mingpay/v1/skipAuth/getUserInfoByCode?${senddate}`).then((res) => {
          if (res.data.resultCode === 0) {
            // 有权限登录,返回用户信息
            resolve('press')
          } else if (res.data.resultCode === 40003) {
            // 无权限登录,返回40003code码
            resolve(res.data.resultCode)
          }
        }).catch((err) => {
          console.log(err)
        })
      },
      onFail: function (err) {
        console.log(err)
      }
    })
  })
}
// 获取用户名称和密码
function getToken () {
  return new Promise((resolve, reject) => {
    // 获取用户的临时授权码
    dd.runtime.permission.requestAuthCode({
      corpId: localStorage.getItem('orgId'), // 企业id
      onSuccess: function (info) {
        let senddate = qs.stringify({
          code: info.code,
          orgId: localStorage.getItem('orgId')
        })
        // 获取用户名和密码
        return instance.post(`${BASE_URL}/mingpay/v1/skipAuth/getUserInfoByCode?${senddate}`).then((res) => {
          if (res.data.resultCode === 0) {
            // 有权限登录,返回用户信息
            let mingUserId = res.data.data.mingUserId
            let loginData = qs.stringify({
              username: mingUserId,
              password: mingUserId,
              scope: 'server',
              grant_type: 'password'
            })
            instance.post(`${BASE_URL}/auth/oauth/token`, loginData,
              {
                headers: {
                  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                  'Authorization': 'Basic bWluZ3BheS13ZWI6bWluZ3BheS13ZWI='
                }
              }).then((response) => {
              localStorage.setItem(`access_token_${localStorage.getItem('orgId')}`, response.data.access_token)
              localStorage.setItem(`refresh_token_${localStorage.getItem('orgId')}`, response.data.refresh_token)
              localStorage.setItem(`expires_in_${localStorage.getItem('orgId')}`, response.data.expires_in * 1000)
              localStorage.setItem(`start_time_${localStorage.getItem('orgId')}`, new Date().getTime())
              resolve('ok')
            }).catch(() => {

            })
          } else if (res.data.resultCode === 40003) {
            // 无权限登录,返回40003code码
            resolve(res.data.resultCode)
          }
        }).catch((err) => {
          console.log(err)
        })
      },
      onFail: function (err) {
        console.log(err)
      }
    })
  })
}
// 刷新token接口
function refreshToken () {
  return new Promise((resolve, reject) => {
    let loginData = qs.stringify({
      refresh_token: localStorage.getItem(`refresh_token_${localStorage.getItem('orgId')}`),
      grant_type: 'refresh_token'
    })
    instance.post(`${BASE_URL}/auth/oauth/token`, loginData, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Authorization': 'Basic bWluZ3BheS13ZWI6bWluZ3BheS13ZWI='
      }
    }).then((response) => {
      localStorage.setItem(`access_token_${localStorage.getItem('orgId')}`, response.data.access_token)
      localStorage.setItem(`refresh_token_${localStorage.getItem('orgId')}`, response.data.refresh_token)
      localStorage.setItem(`expires_in_${localStorage.getItem('orgId')}`, response.data.expires_in * 1000)
      localStorage.setItem(`start_time_${localStorage.getItem('orgId')}`, new Date().getTime())
      resolve('ok')
    }).catch(() => {
      resolve('ok')
    })
  })
}
export { getToken, refreshToken, ispermission }