import { createStore, applyMiddleware, compose, combineReducers } from 'redux'
import { connectRouter } from 'connected-react-router'
import { createHashHistory } from 'history'
import rootReducer, { defaultState } from '../reducer'
import middlewares from '../middlewares'
import { routerMiddleware } from 'connected-react-router'

export const history = createHashHistory()

// eslint-disable-next-line no-underscore-dangle
const devtools = (window as any).__REDUX_DEVTOOLS_EXTENSION__

export const store = (() => {
	const store = createStore(
		combineReducers({
			router: connectRouter(history),
			app: rootReducer(defaultState)
		}),
		compose(
			applyMiddleware(routerMiddleware(history), ...middlewares),
			...(process.env.NODE_ENV === 'development' && devtools
				? [devtools()]
				: [])
		)
	)

	if ((module as any).hot) {
		// Enable Webpack hot module replacement for reducers
		;(module as any).hot.accept('../reducer', () => {
			const nextRootReducer = require('../reducer')
			store.replaceReducer(nextRootReducer)
		})
	}

	return store
})()