const namespaced = true;
let timer

const state = {
  jwt: null,
  userData: null,
  userRole: null,
  expirationDate: null,
  didAutoLogout: false,
  isLoggedIn: false,
  lastPath: null,
  expireTime: 3600000,
};

const mutations = {
  SET_JWT(state, jwt) {
    state.jwt = jwt;
  },
  SET_USER_DATA(state, userData) {
    state.userData = userData;
  },
  SET_USER_ROLE(state, userRole) {
    state.userRole = userRole;
  },
  LOG_OUT(state) {
    state.jwt = null;
    state.userData = null;
    state.userRole = null;
  },
  SET_AUTO_LOGOUT(state){
    state.didAutoLogout = true
  },
  SET_LAST_PATH(state, payload){
    state.lastPath = payload
  },
  SET_EXPIRE_TIME(state, expireTime) {
    state.expireTime = expireTime
  }
};

const getters = {
  jwt: (state) => state.jwt,
  userData: (state) => state.userData,
  userRole: (state) => state.userRole,
  didAutoLogout: (state) => state.didAutoLogout,
  getLastPath : (state) => state.lastPath,
  expireTime : (state) => state.expireTime
};

const actions = {
  setJwt({ commit }, jwt) {
  
    localStorage.setItem('jwt', jwt);
    commit('SET_JWT', jwt);
  },
  setUserData({ commit, dispatch, state }, userData) {
   
    localStorage.setItem('userData', userData)
   
    /*
    calulation of hours to millisec
    (hr*3600000)
    */
    // const expiresIn = 60 * 1000
    // const expiresIn = 20000
    let expiresIn = 3600000

    const expirationDate = new Date().getTime() + expiresIn
    localStorage.setItem('tokenExpiration', expirationDate)
    commit('SET_USER_DATA', userData);

   

   timer= setTimeout(function(){
      dispatch('autoLogout')
    }, expiresIn )
    
  },
  setUserRole({ commit }, userRole) {
    localStorage.setItem('roleName', userRole);
    commit('SET_USER_ROLE', userRole);
  },
  logOut({ commit }) {
    localStorage.removeItem('jwt');
    localStorage.removeItem('userData');
    localStorage.removeItem('roleName');
    
    localStorage.removeItem('tokenExpiration')
    clearTimeout(timer)
    commit('LOG_OUT');
  },
  tryLogin(context) {
    const jwtToken = localStorage.getItem('jwt');
    const userData = localStorage.getItem('userData');
    const role = localStorage.getItem('roleName');
    const tokenExpiration = localStorage.getItem('tokenExpiration')

    const expiresIn= tokenExpiration - new Date().getTime()
    

    if(expiresIn<0){
      return
    }

    timer = setTimeout(function(){
     context.dispatch('autoLogout')
    }, expiresIn )

    context.commit('SET_JWT', jwtToken);
    context.commit('SET_USER_DATA', userData);
    context.commit('SET_USER_ROLE', role);
  },
  autoLogout(context){
    context.dispatch('logOut')
    context.commit('SET_AUTO_LOGOUT')
  },
  setLastPath(context, path){
   context.commit('SET_LAST_PATH', path)
  },
  setExpireTime(context, expireTime) {
    context.commit('SET_EXPIRE_TIME', expireTime)
  }
};

export default {
  namespaced,
  state,
  mutations,
  getters,
  actions,
};