import { UserApi } from '~~/lib/api/user';
import { defineStore } from 'pinia';
import { useLocalStorage } from '@vueuse/core';

export const useAuthStore = defineStore('auth', {
  state: () => ({
    token: useLocalStorage('pinia/auth/token', ''),
    expires: useLocalStorage('pinia/auth/expires', ''),
  }),
  getters: {
    isTokenExpired: state => {
      if (!state.expires) {
        return true;
      }

      if (typeof state.expires === 'string') {
        return new Date(state.expires) < new Date();
      }

      return state.expires < new Date();
    },
  },
  actions: {
    async logout(api: UserApi) {
      const result = await api.logout();

      if (result.error) {
        return result;
      }

      this.token = '';
      this.expires = '';

      return result;
    },
    /**
     * clearSession is used when the user cannot be logged out via the API and
     * must clear it's local session, usually when a 401 is received.
     */
    clearSession() {
      this.token = '';
      this.expires = '';
      navigateTo('/');
    },
  },
});