import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import type { User } from '@/types/user.types'; interface AuthState { user: User | null; token: string | null; refreshToken: string | null; isAuthenticated: boolean; permissions: string[]; loading: boolean; } const initialState: AuthState = { user: null, token: null, refreshToken: null, isAuthenticated: false, permissions: [], loading: true, }; const authSlice = createSlice({ name: 'auth', initialState, reducers: { setCredentials: ( state, action: PayloadAction<{ user: User; token: string; refreshToken?: string; permissions?: string[] }> ) => { state.user = action.payload.user; state.token = action.payload.token; state.refreshToken = action.payload.refreshToken || null; state.permissions = action.payload.permissions || []; state.isAuthenticated = true; state.loading = false; }, logout: (state) => { state.user = null; state.token = null; state.refreshToken = null; state.permissions = []; state.isAuthenticated = false; state.loading = false; }, setLoading: (state, action: PayloadAction) => { state.loading = action.payload; }, updateUser: (state, action: PayloadAction>) => { if (state.user) { state.user = { ...state.user, ...action.payload }; } }, }, }); export const { setCredentials, logout, setLoading, updateUser } = authSlice.actions; export default authSlice.reducer;