import { writable, derived } from 'svelte/store'; import { auth as authApi } from '$api/client.js'; function createAuthStore() { const storedUser = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_user') : null; const storedToken = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_token') : null; const { subscribe, set, update } = writable({ user: storedUser ? JSON.parse(storedUser) : null, token: storedToken || null, loading: false, error: null }); return { subscribe, async login(username, password) { update((s) => ({ ...s, loading: true, error: null })); try { const res = await authApi.login(username, password); const { token, user } = res.data; localStorage.setItem('pos_token', token); localStorage.setItem('pos_user', JSON.stringify(user)); set({ user, token, loading: false, error: null }); return true; } catch (err) { update((s) => ({ ...s, loading: false, error: err.message })); return false; } }, async pinLogin(pin) { update((s) => ({ ...s, loading: true, error: null })); try { const res = await authApi.pinLogin(pin); const { token, user } = res.data; localStorage.setItem('pos_token', token); localStorage.setItem('pos_user', JSON.stringify(user)); set({ user, token, loading: false, error: null }); return true; } catch (err) { update((s) => ({ ...s, loading: false, error: err.message })); return false; } }, logout() { localStorage.removeItem('pos_token'); localStorage.removeItem('pos_user'); set({ user: null, token: null, loading: false, error: null }); }, clearError() { update((s) => ({ ...s, error: null })); } }; } export const authStore = createAuthStore(); export const currentUser = derived(authStore, ($auth) => $auth.user); export const isAuthenticated = derived(authStore, ($auth) => !!$auth.token); export const userRole = derived(authStore, ($auth) => $auth.user?.role?.name?.toLowerCase() || '');