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>();
