import { configureStore, ThunkAction, Action } from "@reduxjs/toolkit";
import loginReducer from "../slices/loginSlice/loginSlice";
import locationSlice from "../slices/common/locationSlice/locationSlice";
import customSnackbarSlice from "../slices/common/customSnackBar/customSnackbarSlice";
import productTypesSlice from "../slices/productTypesSlice/productTypesSlice";
import ProfileSlice from "../slices/profileSlice/ProfileSlice";
import AddressSlice from "../slices/addressSlice/ProfileSlice";
import CheckoutSlice from "../slices/checkoutSlice/CheckoutSlice";
import productsListSlice from "../slices/productList/productListingSlice";
import productDescriptionSlice from "../slices/productDiscriptionSlice/ProductDescriptionSlice";
import CartSlice from "../slices/cartSlice/CartSlice";
import specialProductSlice from "../slices/specialProductSlice/specialProductSlice";
import PastOrderSlice from "../slices/pastOrderSlice/PastOrderSlice";
import SearchSlice from "../slices/searchSlice/SearchSlice";
import CustomOrderSlice from "../slices/customOrderSlice/CustomOrderSlice";
import wishListSlice from "../slices/wishlistSlice/wishlistSlice";
import footerSlice from "../slices/footerSlice/footerSlice";
import OfferSlice from "../slices/offerSlice/OfferSlice";

export const store = configureStore({
  reducer: {
    login: loginReducer,
    locationState: locationSlice,
    customSnackbarState: customSnackbarSlice,
    productTypesState: productTypesSlice,
    ProfileState: ProfileSlice,
    AddressState: AddressSlice,
    CheckoutState: CheckoutSlice,
    ProductsListState: productsListSlice,
    productDescriptionState: productDescriptionSlice,
    CartState: CartSlice,
    SpecialProductState: specialProductSlice,
    PastOrderState: PastOrderSlice,
    SearchSlice: SearchSlice,
    CustomOrderState: CustomOrderSlice,
    WishListState: wishListSlice,
    FooterDataState: footerSlice,
    OfferDataState: OfferSlice,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: false,
    }),
  // window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
});

export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
export type AppThunk<ReturnType = void> = ThunkAction<
  ReturnType,
  RootState,
  unknown,
  Action<string>
>;
