import { isSecureURL } from '@baserow/modules/core/utils/string'
import jwtDecode from 'jwt-decode'

const cookieTokenName = 'jwt_token'

export const setToken = (token, { $cookies, $env }, key = cookieTokenName) => {
  if (process.SERVER_BUILD) return
  const secure = isSecureURL($env.PUBLIC_WEB_FRONTEND_URL)
  $cookies.set(key, token, {
    path: '/',
    maxAge: 60 * 60 * 24 * 7,
    sameSite: 'lax',
    secure,
  })
}

export const unsetToken = ({ $cookies }, key = cookieTokenName) => {
  if (process.SERVER_BUILD) return
  $cookies.remove(key)
}

export const getToken = ({ $cookies }, key = cookieTokenName) => {
  return $cookies.get(key)
}

export const getTokenIfEnoughTimeLeft = (
  { $cookies },
  key = cookieTokenName
) => {
  const token = getToken({ $cookies }, key)
  if (!token) return null

  const decodedToken = jwtDecode(token)
  const now = Math.ceil(new Date().getTime() / 1000)
  // Return the token if it is still valid for more of the 10% of the lifespan.
  if ((decodedToken.exp - now) / (decodedToken.exp - decodedToken.iat) > 0.1) {
    return token
  }
}

export const logoutAndRedirectToLogin = (router, store) => {
  store.dispatch('auth/logoff')
  router.push({ name: 'login' }, () => {
    store.dispatch('auth/clearAllStoreUserData')
  })
}