import cookie from './cookie'
import store from '@/store'
import router from '@/router'

function parseToken (token) {
  let path = store.state.baseURL
  if (path === '') path = '/'
  document.cookie = `auth=${token}; max-age=86400; path=${path}`
  let res = token.split('.')
  let user = JSON.parse(window.atob(res[1]))
  store.commit('setJWT', token)
  store.commit('setUser', user)
}

function loggedIn () {
  return new Promise((resolve, reject) => {
    let request = new window.XMLHttpRequest()
    request.open('GET', `${store.state.baseURL}/api/auth/renew`, true)
    request.setRequestHeader('Authorization', `Bearer ${cookie('auth')}`)

    request.onload = () => {
      if (request.status === 200) {
        parseToken(request.responseText)
        resolve()
      } else {
        reject(new Error(request.responseText))
      }
    }
    request.onerror = () => reject(new Error('Could not finish the request'))
    request.send()
  })
}

function login (user, password) {
  let data = {username: user, password: password}
  return new Promise((resolve, reject) => {
    let request = new window.XMLHttpRequest()
    request.open('POST', `${store.state.baseURL}/api/auth/get`, true)

    request.onload = () => {
      if (request.status === 200) {
        parseToken(request.responseText)
        resolve()
      } else {
        reject(request.responseText)
      }
    }
    request.onerror = () => reject(new Error('Could not finish the request'))
    request.send(JSON.stringify(data))
  })
}

function logout () {
  let path = store.state.baseURL
  if (path === '') path = '/'
  document.cookie = `auth='nothing'; max-age=0; path=${path}`
  router.push({path: '/login'})
}

export default {
  loggedIn: loggedIn,
  login: login,
  logout: logout
}