import { configureStore } from '@reduxjs/toolkit';
import createSagaMiddleware from 'redux-saga';
import { globalStore } from '@spglobal/ca-mfe-package-utils';
import { companyInformationApi } from '@root/apis/companyInformationApi';
import { financialStatementApi } from '@root/apis/financialStatementApi';
import { qAdjustmentsApi} from '@root/apis/qAdjusmentsApi';
import { scoringInputsApi } from '@root/apis/scoringInputsApi';
import { loadPitAdjApi } from '@root/apis/loadPitAdjApi ';
import companyInformationReducer from './companyInformation/companyInformation.reducer';
import progressTrackerReducer from './progressTracker/progressTracker.reducer';
import companyDataSettingsReducer from './companyDataSettings/companyDataSettings.reducer';
import scoringInputsReducer from './scoringInputs/scoringInputs.reducer';
import qAdjustmentsReducer from './qAdjustments/qAdjustments.reducer';
import sizeAdjustmentsReducer from './sizeAdjustments/sizeAdjustments.reducer';
import { sizeAdjustmentsApi } from '@root/apis/sizeAdjustmentsApi';
import generateScoreReducer from '@store/generateScore/generateScore.reducer';
import { generateScoreApi } from '@root/apis/generateScoreApi';
import { scoringPreferenceApi } from '@root/apis/scoringPreferenceApi';
import parentAndGovernmentReducer from './parentAndGovernment/parentAndGovernment.reducer';
import { parentAndGovernmentApi, parentInfoApi } from '@root/apis/parentAndGovermentApi';
import userInformationReducer from './userInformation/userInformation.reducer';
import scoringSelectionReducer from '@store/scoringSelection/scoringSelection.reducer';
import loadPitAdjReducer from './loadPitAdj/loadPitAdj.reducer';

const sagaMiddleware = createSagaMiddleware();

const middlewares = [
  sagaMiddleware,
  companyInformationApi.middleware,
  financialStatementApi.middleware,
  qAdjustmentsApi.middleware,
  scoringInputsApi.middleware,
  sizeAdjustmentsApi.middleware,
  generateScoreApi.middleware,
  scoringPreferenceApi.middleware,
  parentAndGovernmentApi.middleware,
  parentInfoApi.middleware,
  loadPitAdjApi.middleware
];

const store = configureStore({
  reducer: {
    [companyInformationApi.reducerPath]: companyInformationApi.reducer,
    [financialStatementApi.reducerPath]: financialStatementApi.reducer,
    [qAdjustmentsApi.reducerPath]: qAdjustmentsApi.reducer,
    [scoringInputsApi.reducerPath]: scoringInputsApi.reducer,
    [sizeAdjustmentsApi.reducerPath]: sizeAdjustmentsApi.reducer,
    [generateScoreApi.reducerPath]: generateScoreApi.reducer,
    [scoringPreferenceApi.reducerPath]: scoringPreferenceApi.reducer,
    [parentAndGovernmentApi.reducerPath]: parentAndGovernmentApi.reducer,
    [parentInfoApi.reducerPath]: parentInfoApi.reducer,
    [loadPitAdjApi.reducerPath]: loadPitAdjApi.reducer,

    companyInformation: companyInformationReducer,
    progressTracker: progressTrackerReducer,
    companyDataSettings: companyDataSettingsReducer,
    scoringInputs: scoringInputsReducer,
    qAdjustments: qAdjustmentsReducer,
    sizeAdjustments: sizeAdjustmentsReducer,
    generateScore: generateScoreReducer,
    parentAndGovernment: parentAndGovernmentReducer,
    userInfo: userInformationReducer,
    scoringSelection: scoringSelectionReducer,
    loadPitAdj: loadPitAdjReducer
  },
  // middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(sagaMiddleware),
  middleware: getDefaultMiddleware => getDefaultMiddleware({
    serializableCheck: false
  }).concat(middlewares)
});

// sagaMiddleware.run(rootSaga);

globalStore.RegisterStore('ScoringUI', store);

export default store;
