import React, { useReducer, useMemo } from "react";
import {
  ApplicationStateContext,
  ApplicationDispatchContext
} from "../state/ApplicationContexts";
import {
  reducer,
  dispatchActions as reducerDispatchActions
} from "../state/reducer";
import { initialState } from "../state/initialState";

const ApplicationStateProvider = ({ children }) => {
  const [state, dispatch] = useReducer(reducer, initialState);
  const dispatchActions = useMemo(
    () => reducerDispatchActions(dispatch),
    [dispatch]
  );

  return (
    <ApplicationStateContext.Provider value={state}>
      <ApplicationDispatchContext.Provider value={dispatchActions}>
        {children}
      </ApplicationDispatchContext.Provider>
    </ApplicationStateContext.Provider>
  );
};

export default ApplicationStateProvider;