import { defineStore } from 'pinia' import { ref } from 'vue' import { getProfile } from '@/api' export const useUserStore = defineStore('user', () => { const user = ref(null) const token = ref(localStorage.getItem('access_token') || '') function setToken(newToken: string) { if (!newToken) return token.value = newToken localStorage.setItem('access_token', newToken) } function setTokens(accessToken: string, refreshToken?: string) { if (!accessToken) return token.value = accessToken localStorage.setItem('access_token', accessToken) if (refreshToken) { localStorage.setItem('refresh_token', refreshToken) } } function getRefreshToken(): string { return localStorage.getItem('refresh_token') || '' } function clearToken() { token.value = '' user.value = null localStorage.removeItem('access_token') localStorage.removeItem('refresh_token') } async function fetchProfile() { if (!token.value && localStorage.getItem('access_token')) { token.value = localStorage.getItem('access_token') || '' } if (!token.value) { user.value = null return null } try { user.value = await getProfile() return user.value } catch (error) { clearToken() throw error } } async function refreshCreditsFromResponse(response: any) { const credits = response?.credits const balance = typeof credits?.balance === 'number' ? credits.balance : undefined if (typeof balance !== 'number') return if (!user.value) { await fetchProfile().catch(() => undefined) } user.value = { ...(user.value || {}), credits: balance, total_credits_used: typeof credits?.cost === 'number' ? Number(user.value?.total_credits_used || 0) + credits.cost : user.value?.total_credits_used, } } const isLoggedIn = () => !!token.value return { user, token, setToken, setTokens, getRefreshToken, clearToken, fetchProfile, refreshCreditsFromResponse, isLoggedIn } })