import { configureStore } from "@reduxjs/toolkit"
import teamMembersReducer from "./slices/teamMembersSlice"
import rolesReducer from "./slices/rolesSlice"
import departmentsReducer from "./slices/departmentsSlice"
import businessVerticalsReducer from "./slices/businessVerticalsSlice"
import vehicleTypesReducer from "./slices/vehicleTypesSlice"
import vehicleMakesReducer from "./slices/vehicleMakesSlice"
import vehicleModelsReducer from "./slices/vehicleModelsSlice"
import vehiclesReducer from "./slices/vehiclesSlice"
import addOnsReducer from "./slices/addOnsSlice"
import clientTypesReducer from "./slices/clientTypesSlice"
import vehicleStatusesReducer from "./slices/vehicleStatusesSlice"
import contractCoverageReducer from "./slices/contractCoverageSlice"
import paymentPlansReducer from "./slices/paymentPlansSlice"
import priceConfigurationsReducer from "./slices/priceConfigurationsSlice"
import clientCompaniesReducer from "./slices/clientCompaniesSlice"
import clientContactsReducer from "./slices/clientContactsSlice"
import pricingReducer from "./slices/pricingSlice"
import uiReducer from "./slices/uiSlice"

export const makeStore = () => {
  return configureStore({
    reducer: {
      teamMembers: teamMembersReducer,
      roles: rolesReducer,
      departments: departmentsReducer,
      businessVerticals: businessVerticalsReducer,
      vehicleTypes: vehicleTypesReducer,
      vehicleMakes: vehicleMakesReducer,
      vehicleModels: vehicleModelsReducer,
      vehicles: vehiclesReducer,
      addOns: addOnsReducer,
      clientTypes: clientTypesReducer,
      vehicleStatuses: vehicleStatusesReducer,
      contractCoverage: contractCoverageReducer,
      paymentPlans: paymentPlansReducer,
      priceConfigurations: priceConfigurationsReducer,
      clientCompanies: clientCompaniesReducer,
      clientContacts: clientContactsReducer,
      pricing: pricingReducer,
      ui: uiReducer,
    },
    devTools: process.env.NODE_ENV !== "production",
  })
}

// Infer the type of makeStore
export type AppStore = ReturnType<typeof makeStore>

// Infer the `RootState` and `AppDispatch` types from the store itself
export type RootState = ReturnType<AppStore["getState"]>
export type AppDispatch = AppStore["dispatch"]

