import { defineStore } from 'pinia' import { computed, ref } from 'vue' import { api } from '@/api/client' import type { User } from '@/types' interface LoginResult { access_token: string; refresh_token: string; expires_at: string; user: User } export const useAuthStore = defineStore('auth', () => { const user = ref(null) const token = ref(localStorage.getItem('access_token') || '') const authenticated = computed(() => Boolean(token.value)) async function login(username: string, password: string) { const result = await api.post('/auth/login', { username, password }) token.value = result.access_token user.value = result.user localStorage.setItem('access_token', result.access_token) localStorage.setItem('refresh_token', result.refresh_token) } async function loadUser() { if (!token.value) return user.value = await api.get('/auth/me') } function logout() { token.value = '' user.value = null localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') } return { user, token, authenticated, login, loadUser, logout } })