import { defineStore } from 'pinia'; import { authService } from '~/services/auth.service'; interface User { id: string; email: string; fullName: string; role: 'INSTRUCTOR' | 'ADMIN' | 'STUDENT'; } export const useAuthStore = defineStore('auth', { state: () => ({ user: null as User | null, token: null as string | null, isAuthenticated: false }), getters: { isInstructor: (state) => state.user?.role === 'INSTRUCTOR', isAdmin: (state) => state.user?.role === 'ADMIN', isStudent: (state) => state.user?.role === 'STUDENT' }, actions: { async login(email: string, password: string) { try { // Call real API const response = await authService.login(email, password); this.token = response.token; this.user = response.user as User; this.isAuthenticated = true; // Save to localStorage (including refreshToken) if (process.client) { localStorage.setItem('token', this.token); localStorage.setItem('refreshToken', response.refreshToken); localStorage.setItem('user', JSON.stringify(this.user)); } return { token: this.token, user: this.user }; } catch (error: any) { // Re-throw error to be handled by login page throw error; } }, logout() { this.user = null; this.token = null; this.isAuthenticated = false; if (process.client) { localStorage.removeItem('token'); localStorage.removeItem('user'); } }, checkAuth() { if (process.client) { const token = localStorage.getItem('token'); const user = localStorage.getItem('user'); if (token && user) { this.token = token; this.user = JSON.parse(user); this.isAuthenticated = true; } } } } });