import { Action, ThunkAction, configureStore } from "@reduxjs/toolkit";

import apiSettingsReducer from "./api-settings-slice";
import bookingReducer from "./features/booking/booking-slice";
import priceDetailsReducer from "./features/price-details/price-details-slice";
import travelersFormReducer from "./features/travelers-form/travelers-form-slice";
import summaryReducer from "./features/summary/summary-slice";
import { useDispatch } from "react-redux";

export const store = configureStore({
  reducer: {
    booking: bookingReducer,
    travelersForm: travelersFormReducer,
    priceDetails: priceDetailsReducer,
    summary: summaryReducer,
    apiSettings: apiSettingsReducer,
  },
});

export type RootState = ReturnType<typeof store.getState>;

export type AppThunk<ReturnType = void> = ThunkAction<
  ReturnType,
  RootState,
  unknown,
  Action<string>
>;

export type AppDispatch = typeof store.dispatch;

export const useAppDispatch = () => useDispatch<AppDispatch>();
