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; } const initialState: AuthState = { user: null, token: null, isAuthenticated: false, 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;