import { defineStore } from 'pinia' import { ref, computed } from 'vue' import authApi from '@/api/auth' export const useAuthStore = defineStore('auth', () => { const user = ref(null) const accessToken = ref(null) const refreshToken = ref(null) const loading = ref(false) const error = ref(null) const isAuthenticated = computed(() => !!accessToken.value) const isSuperadmin = computed(() => user.value?.role === 'superadmin') const isOwner = computed(() => user.value?.role === 'owner') const isAdmin = computed(() => user.value?.role === 'admin') function setTokens(access, refresh) { accessToken.value = access refreshToken.value = refresh localStorage.setItem('access_token', access) if (refresh) { localStorage.setItem('refresh_token', refresh) } } function setUser(userData) { user.value = userData localStorage.setItem('user', JSON.stringify(userData)) } function clearAuth() { user.value = null accessToken.value = null refreshToken.value = null localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') localStorage.removeItem('user') } async function login(email, password) { loading.value = true error.value = null try { const data = await authApi.login(email, password) setTokens(data.access_token, data.refresh_token) setUser(data.user) return data.user } catch (err) { error.value = err.response?.data?.detail || 'Login failed' throw err } finally { loading.value = false } } async function logout() { try { await authApi.logout() } catch (err) { console.error('Logout API error:', err) } finally { clearAuth() } } async function checkAuth() { const storedToken = localStorage.getItem('access_token') const storedUser = localStorage.getItem('user') if (storedToken && storedUser) { accessToken.value = storedToken refreshToken.value = localStorage.getItem('refresh_token') user.value = JSON.parse(storedUser) // Verify token is still valid try { const userData = await authApi.getMe() setUser(userData) } catch (err) { console.error('Token verification failed:', err) clearAuth() } } } return { user, accessToken, refreshToken, loading, error, isAuthenticated, isSuperadmin, isOwner, isAdmin, login, logout, checkAuth, clearAuth } })