import { applyMiddleware, createStore as reduxCreateStore } from 'redux';

import promise from 'redux-promise-middleware';
import { createLogger } from 'redux-logger';

import { reducer } from './reducer';

// @ts-ignore
const env = window.getEnvironment();

// So Redux logging doesn't go to disk, and so we can get colors/styles
const directConsole = {
  // @ts-ignore
  log: console._log,
  groupCollapsed: console.groupCollapsed,
  group: console.group,
  groupEnd: console.groupEnd,
  warn: console.warn,
  // tslint:disable-next-line no-console
  error: console.error,
};

const logger = createLogger({
  logger: directConsole,
});

// Exclude logger if we're in production mode
const middlewareList = env === 'production' ? [promise] : [promise, logger];

const enhancer = applyMiddleware.apply(null, middlewareList);

export const createStore = (initialState: any) =>
  reduxCreateStore(reducer, initialState, enhancer);