import { configureStore, combineReducers } from "@reduxjs/toolkit";
import {
  persistStore,
  persistReducer,
  FLUSH,
  REHYDRATE,
  PAUSE,
  PERSIST,
  PURGE,
  REGISTER,
} from "redux-persist";
import storage from "redux-persist/lib/storage"; // localStorage for web

// Import reducers
import authReducer from "./features/auth/authSlice";
import filterReducer from "./features/filter/filterSlice";

// Configuration for redux-persist
const persistConfig = {
  key: "root",
  storage,
  // Whitelist specific reducers to persist (optional)
  whitelist: ["auth", "filter"], // Only auth and filter will be persisted
  // Alternatively, you can blacklist reducers that shouldn't be persisted
  // blacklist: ['counter'], // Counter won't be persisted
};

// Combine all reducers
const rootReducer = combineReducers({
  auth: authReducer,
  filter: filterReducer,
});

// Create persisted reducer
const persistedReducer = persistReducer(persistConfig, rootReducer);

// Create store with persisted reducer
export const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        // Ignore these action types
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
});

// Create persistor
export const persistor = persistStore(store);

// Export types
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
