// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

export const createReducer = (initialState, handlers) => {
  return function reducer(state = initialState, action) {
    if (handlers.hasOwnProperty(action.type)) {
      return handlers[action.type](state, action);
    } else {
      return state;
    }
  };
};

const DEFAULT_REQUEST_KEY = '*';

export const createKeyedRequestReducer = (start, success, failure) => {
  return createReducer({}, {
    [start]: (state, {requestKey = DEFAULT_REQUEST_KEY}) => {
      return {
        ...state,
        [requestKey]: {
          requesting: true,
          error: null,
        },
      };
    },
    [success]: (state, {requestKey = DEFAULT_REQUEST_KEY}) =>{
      return {
        ...state,
        [requestKey]: {
          requesting: false,
          error: null,
        },
      };
    },
    [failure]: (state, {requestKey = DEFAULT_REQUEST_KEY, error}) => {
      return {
        ...state,
        [requestKey]: {
          requesting: false,
          error,
        },
      };
    },
  });
};

export const createRequestReducer = (start, success, failure) => {
  return createReducer({requesting: false, error: null}, {
    [start]: (_state, _action) => ({
      requesting: true,
      error: null,
    }),
    [success]: (_state, _action) =>({
      requesting: false,
      error: null,
    }),
    [failure]: (_state, {error}) => ({
      requesting: false,
      error,
    }),
  });
};
