import commitExcessActions from './commitExcessActions';
export function recompute(previousLiftedState, storeState, action) {
  let nextActionId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
  let maxAge = arguments.length > 4 ? arguments[4] : undefined;
  let isExcess = arguments.length > 5 ? arguments[5] : undefined;
  const actionId = nextActionId - 1;
  const liftedState = {
    ...previousLiftedState
  };
  if (liftedState.currentStateIndex === liftedState.stagedActionIds.length - 1) {
    liftedState.currentStateIndex++;
  }
  liftedState.stagedActionIds = [...liftedState.stagedActionIds, actionId];
  liftedState.actionsById = {
    ...liftedState.actionsById
  };
  if (action.type === 'PERFORM_ACTION') {
    liftedState.actionsById[actionId] = action;
  } else {
    liftedState.actionsById[actionId] = {
      action: action.action || action,
      timestamp: action.timestamp || Date.now(),
      stack: action.stack,
      type: 'PERFORM_ACTION'
    };
  }
  liftedState.nextActionId = nextActionId;
  liftedState.computedStates = [...liftedState.computedStates, {
    state: storeState
  }];
  if (isExcess) commitExcessActions(liftedState);else if (maxAge) {
    const excess = liftedState.stagedActionIds.length - maxAge;
    if (excess > 0) commitExcessActions(liftedState, excess);
  }
  return liftedState;
}