import {createStore, applyMiddleware} from 'redux'
import RavenMiddleware from 'redux-raven-middleware'
import {sentry_dsn, DEV, PRODUCTION} from './constants'
import reducer from '../reducers/root'

const logger = store => next => action => {
  console.group(action.type)
  console.info('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  console.groupEnd(action.type)
  return result
}

const store = createStore(reducer, applyMiddleware(...([
  DEV && logger,
  PRODUCTION && RavenMiddleware(sentry_dsn, {
    release: __RELEASE__,
  }),
].filter(Boolean))))

if (module.hot) {
  module.hot.accept('../reducers/root', () => {
    const next_root_reducer = require('../reducers/root')
    store.replaceReducer(next_root_reducer)
  })
}

export default store
