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 and token 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', }; // Mock JWT token for development - this is just for testing, real auth needed in production const MOCK_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyX3Rlc3QxMjMiLCJmYW1pbHlJZCI6ImZhbV90ZXN0MTIzIiwiaWF0IjoxNjAwMDAwMDAwfQ.mock_signature_for_development'; // Set mock token in localStorage for development if (typeof window !== 'undefined' && process.env.NODE_ENV === 'development') { localStorage.setItem('accessToken', MOCK_TOKEN); } const initialState: AuthState = { // Use mock user in development if no real user is stored user: process.env.NODE_ENV === 'development' ? MOCK_USER : null, token: process.env.NODE_ENV === 'development' ? MOCK_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;