/* eslint-disable global-require */
/* eslint-disable no-undef */
import { compose } from "redux";
import persistState from "redux-localstorage";
import { StoreEnhancer } from "redux";
import { routerMiddleware } from "connected-react-router";
import { createBrowserHistory } from "history";
import { createEpicMiddleware } from "redux-observable";
import { createStore, applyMiddleware } from "redux";
import rootEpic from "./epics";
import rootReducer from "./reducers";
import { FirebaseUser } from "../auth/logic/User";

export const history = createBrowserHistory();

declare global {
  interface Window {
    __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: any;
  }
}

const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

const epicMiddleware = createEpicMiddleware({
  dependencies: {
    user: new FirebaseUser(),
  },
});

const rootEnhacer: StoreEnhancer = composeEnhancer(
  applyMiddleware(routerMiddleware(history), epicMiddleware),
  persistState(undefined, "token")
);

const store = createStore(rootReducer(history), rootEnhacer);
epicMiddleware.run(rootEpic);

export const dispatch = store.dispatch;
export default store;