/* eslint-disable no-console */
import storage from 'redux-persist/lib/storage';

import { configureStore } from '@reduxjs/toolkit';
import { createLogger } from 'redux-logger';

import { persistReducer } from 'redux-persist';

import promiseMiddleware from 'redux-promise-middleware';
import { rootReducer } from './reducer';

// So Redux logging doesn't go to disk, and so we can get colors/styles
const directConsole = {
  log: (console as any)._log,
  groupCollapsed: console.groupCollapsed,
  group: console.group,
  groupEnd: console.groupEnd,
  warn: console.warn,
  error: console.error,
};

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

export const persistConfig = {
  key: 'root',
  storage,
  whitelist: ['userConfig'],
};

const persistedReducer = persistReducer(persistConfig, rootReducer);

// Exclude logger if we're in production mode
const disableLogging = true;
const middlewareList = disableLogging ? [promiseMiddleware] : [logger, promiseMiddleware];

export const createStore = (initialState: any) =>
  configureStore({
    reducer: persistedReducer,
    preloadedState: initialState,
    middleware: (getDefaultMiddleware: any) =>
      getDefaultMiddleware({
        serializableCheck: true,
        immutableCheck: true,
      }).concat(middlewareList),
  });