const namespaced = true;
let timer

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

const mutations = {
  SET_JWT(state, jwt) {
    state.jwt = jwt;
  },
  SET_USER_DATA(state, userData) {
    
    state.userData = userData;
    // state.tokenExpiration
  },
  SET_USER_ROLE(state, userRole) {
    state.userRole = userRole;
  },
  // SET_TOKEN_EXPIRATION(state, tokenExpiration){
  //   console.log("in action epiration data is", tokenExpiration);
  // state.expirationDate = tokenExpiration
  // },
  LOG_OUT(state) {
    state.jwt = null;
    state.userData = null;
    state.userRole = null;
  },
  setAutoLogout(state){
    state.didAutoLogout = true
  },
  
  setLastPath(state, payload){
    
    state.lastPath = payload
  }
};

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

const actions = {
  setJwt({ commit }, jwt) {
    localStorage.setItem('jwt', jwt);
    commit('SET_JWT', jwt);
  },
  setUserData({ commit, dispatch }, userData) {
    localStorage.setItem('userData', userData);
    /*
    calulation of hours to millisec
    (hr*3600000)
    */
    // const expiresIn = 60 * 1000
    const expiresIn = 20000
    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('setAutoLogout')
  },
  setLastPath(context, path){
   console.log("last path stored", path);
   context.commit('setLastPath', path)
  }
};

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