import { defineStore } from 'pinia'; import { ref, computed } from 'vue'; import { apiFetch } from '../services/api'; export const useAuthStore = defineStore('auth', () => { const user = ref(JSON.parse(localStorage.getItem('choreus_user') || 'null')); const token = ref(localStorage.getItem('choreus_token') || null); const loading = ref(false); const error = ref(null); const isAuthenticated = computed(() => !!token.value && !!user.value); const isAdmin = computed(() => user.value?.role === 'admin'); async function demoLogin(email) { loading.value = true; error.value = null; try { const data = await apiFetch('/auth/demo-login', { method: 'POST', body: JSON.stringify({ email }) }); setAuthData(data.access_token, data.user); return data.user; } catch (err) { error.value = err.message; throw err; } finally { loading.value = false; } } async function googleLogin(credential, payload = {}) { loading.value = true; error.value = null; try { const data = await apiFetch('/auth/google', { method: 'POST', body: JSON.stringify({ credential, ...payload }) }); setAuthData(data.access_token, data.user); return data.user; } catch (err) { error.value = err.message; throw err; } finally { loading.value = false; } } async function fetchCurrentUser() { if (!token.value) return null; try { const userData = await apiFetch('/auth/me'); user.value = userData; localStorage.setItem('choreus_user', JSON.stringify(userData)); return userData; } catch (err) { logout(); return null; } } async function updateProfile(updates) { if (!user.value) return; try { const updatedUser = await apiFetch(`/users/${user.value.id}`, { method: 'PATCH', body: JSON.stringify(updates) }); user.value = updatedUser; localStorage.setItem('choreus_user', JSON.stringify(updatedUser)); return updatedUser; } catch (err) { error.value = err.message; throw err; } } function setAuthData(accessToken, userData) { token.value = accessToken; user.value = userData; localStorage.setItem('choreus_token', accessToken); localStorage.setItem('choreus_user', JSON.stringify(userData)); } function logout() { token.value = null; user.value = null; localStorage.removeItem('choreus_token'); localStorage.removeItem('choreus_user'); } return { user, token, loading, error, isAuthenticated, isAdmin, demoLogin, googleLogin, fetchCurrentUser, updateProfile, logout }; });