import { combineReducers } from 'redux';
import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';

import notificationsSlice from './notifications';
import postSlice from './post';
import profileSlice from './profile';
import recommendedSlice from './recommended';
import searchSlice from './search';
import uiReducer from './ui';
import userSlice from './user';

const combinedReducers = combineReducers({
  notifications: notificationsSlice,
  post: postSlice,
  profile: profileSlice,
  recommended: recommendedSlice,
  search: searchSlice,
  ui: uiReducer,
  user: userSlice,
});

const rootReducer = (state, action) => {
  if (action.type === 'user/logout') {
    // eslint-disable-next-line no-param-reassign
    state = {};
  }
  return combinedReducers(state, action);
};

const customizedMiddleware = getDefaultMiddleware({
  immutableCheck: false,
  serializableCheck: false,
});

const store = configureStore({
  reducer: rootReducer,
  middleware: customizedMiddleware,
});

export default store;