import { create } from 'zustand'; import { login as loginApi } from '../api/auth'; const useAuthStore = create((set) => ({ user: JSON.parse(localStorage.getItem('user') || 'null'), token: localStorage.getItem('token') || null, isLoading: false, error: null, login: async (email, password) => { set({ isLoading: true, error: null }); try { const { data } = await loginApi(email, password); localStorage.setItem('token', data.access_token); localStorage.setItem('user', JSON.stringify(data.user)); set({ user: data.user, token: data.access_token, isLoading: false }); return data.user; } catch (err) { const msg = err.response?.data?.detail || 'Login gagal'; set({ error: msg, isLoading: false }); throw new Error(msg); } }, logout: () => { localStorage.removeItem('token'); localStorage.removeItem('user'); // We intentionally don't call set({ user: null }) here. // Setting state to null would trigger React Router's // before the window.location.href reload completes, causing a flash. window.location.href = '/'; }, isSuperAdmin: () => { const state = useAuthStore.getState(); return state.user?.role === 'super_admin'; }, isOwner: () => { const state = useAuthStore.getState(); return state.user?.role === 'owner'; }, isKasir: () => { const state = useAuthStore.getState(); return state.user?.role === 'kasir'; }, clearError: () => set({ error: null }), })); export default useAuthStore;