import { defineStore } from 'pinia' import { ref, computed } from 'vue' import api from '@/composables/useApi' export const useAuthStore = defineStore('auth', () => { const accessToken = ref(localStorage.getItem('access_token') || null) const user = ref(null) const isAuthenticated = computed(() => !!accessToken.value) const timezone = computed(() => user.value?.timezone || 'UTC') function setToken(token) { accessToken.value = token localStorage.setItem('access_token', token) } function clearToken() { accessToken.value = null user.value = null localStorage.removeItem('access_token') } async function login(email, password) { const res = await api.post('/api/auth/login', { email, password }) setToken(res.data.access_token) await fetchMe() } async function register(email, password, fullName) { const res = await api.post('/api/auth/register', { email, password, full_name: fullName, }) setToken(res.data.access_token) await fetchMe() } async function logout() { try { await api.post('/api/auth/logout') } catch (_) { // ignore errors on logout } clearToken() } async function tryRefresh() { try { const res = await api.post('/api/auth/refresh') setToken(res.data.access_token) await fetchMe() } catch (_) { clearToken() } } async function fetchMe() { try { const res = await api.get('/api/users/me') user.value = res.data } catch (_) { clearToken() } } function setUser(userData) { user.value = userData } return { accessToken, user, isAuthenticated, timezone, setToken, clearToken, setUser, login, register, logout, tryRefresh, fetchMe, } })