import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import type { RootState } from '../store'; export interface User { id: string; email: string; name: string; familyId: string; } export interface AuthState { user: User | null; token: string | null; isAuthenticated: boolean; loading: boolean; } // Mock user for development (TODO: Remove in production and implement real auth) const MOCK_USER: User = { id: 'user_test123', email: 'test@maternal.app', name: 'Test User', familyId: 'fam_test123', }; const initialState: AuthState = { // Use mock user in development if no real user is stored user: process.env.NODE_ENV === 'development' ? MOCK_USER : null, token: null, isAuthenticated: process.env.NODE_ENV === 'development', loading: false, }; const authSlice = createSlice({ name: 'auth', initialState, reducers: { setUser: (state, action: PayloadAction) => { state.user = action.payload; state.isAuthenticated = true; }, setToken: (state, action: PayloadAction) => { state.token = action.payload; }, setAuth: (state, action: PayloadAction<{ user: User; token: string }>) => { state.user = action.payload.user; state.token = action.payload.token; state.isAuthenticated = true; }, logout: (state) => { state.user = null; state.token = null; state.isAuthenticated = false; }, setLoading: (state, action: PayloadAction) => { state.loading = action.payload; }, }, }); export const { setUser, setToken, setAuth, logout, setLoading } = authSlice.actions; // Selectors export const selectUser = (state: RootState) => state.auth?.user; export const selectToken = (state: RootState) => state.auth?.token; export const selectIsAuthenticated = (state: RootState) => state.auth?.isAuthenticated ?? false; export const selectAuthLoading = (state: RootState) => state.auth?.loading ?? false; export const selectFamilyId = (state: RootState) => state.auth?.user?.familyId; export default authSlice.reducer;