import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import { hashHistory } from 'react-router';
import { routerMiddleware, push } from 'react-router-redux';
import { createLogger } from 'redux-logger';
import rootReducer from '../reducers';

export default (initialState = {}) => {
  // Redux Configuration
	const middleware = [];
	const enhancers = [];

  // Thunk Middleware
	middleware.push(thunk);

  // Logging Middleware
	const logger = createLogger({
		level: 'info',
		collapsed: true
	});
	middleware.push(logger);

  // Router Middleware
	const router = routerMiddleware(hashHistory);
	middleware.push(router);

  // Redux DevTools Configuration
	const actionCreators = {

		push,
	};
  // If Redux DevTools Extension is installed use it, otherwise use Redux compose
  /* eslint-disable no-underscore-dangle */
	const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
      // Options: http://zalmoxisus.github.io/redux-devtools-extension/API/Arguments.html
	actionCreators,
})
    : compose;
  /* eslint-enable no-underscore-dangle */

  // Apply Middleware & Compose Enhancers
	enhancers.push(applyMiddleware(...middleware));
	const enhancer = composeEnhancers(...enhancers);

  // Create Store
	const store = createStore(rootReducer, initialState, enhancer);

	if (module.hot) {
		module.hot.accept('../reducers', () =>
      store.replaceReducer(require('../reducers')) // eslint-disable-line global-require
    );
	}

	return store;
};
