import { createReducerAndModels } from './createReducerFactory';
import enhanceStore from './enhanceStore';
let appStore;
export default function configureStore(initialState, storeMiddlewares, createReducer) {
if(appStore) return appStore;
const logger = createLogger({
level: 'info',
collapsed: true
});
const router = routerMiddleware(hashHistory);
const enhancer = compose(
applyMiddleware(thunk, router, logger, ...storeMiddlewares, promiseMiddleware(), loadingBarMiddleware({promiseTypeSuffixes: ['START', 'SUCCESS', 'ERROR']})),
window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : noop => noop
);
const { Models, hotAcceptId, hotModelsFeedback } = createReducer(module.hot);
const { reducers, models } = createReducerAndModels({routing: routerReducer, loadingBar: loadingBarReducer}, Models);
const rootReducer = combineReducers(reducers);
appStore = createStore(rootReducer, initialState, enhancer);
enhanceStore(appStore, models, reducers);
if (window.__REDUX_DEVTOOLS_EXTENSION__) {
window.__REDUX_DEVTOOLS_EXTENSION__.updateStore(appStore);
}