import { create } from 'zustand'; import { getMe, login as loginApi } from '../api/auth'; import { initAnalytics, trackAuthEvent } from '../services/analytics'; import type { User } from '../types/api'; interface AuthState { user: User | null; isAuthenticated: boolean; isLoading: boolean; login: (email: string, password: string) => Promise; logout: () => void; loadUser: () => Promise; } export const useAuthStore = create((set) => ({ user: null, isAuthenticated: !!localStorage.getItem('access_token'), isLoading: false, login: async (email: string, password: string) => { set({ isLoading: true }); try { const tokens = await loginApi(email, password); localStorage.setItem('access_token', tokens.access_token); localStorage.setItem('refresh_token', tokens.refresh_token); const user = await getMe(); set({ user, isAuthenticated: true, isLoading: false }); initAnalytics(user); trackAuthEvent('login', user.id); } catch (error) { set({ isLoading: false }); throw error; } }, logout: () => { const { user } = useAuthStore.getState(); trackAuthEvent('logout', user?.id); localStorage.removeItem('access_token'); localStorage.removeItem('refresh_token'); set({ user: null, isAuthenticated: false }); }, loadUser: async () => { if (!localStorage.getItem('access_token')) { set({ isAuthenticated: false }); return; } set({ isLoading: true }); try { const user = await getMe(); set({ user, isAuthenticated: true, isLoading: false }); initAnalytics(user); } catch { localStorage.removeItem('access_token'); set({ user: null, isAuthenticated: false, isLoading: false }); } }, }));