/**
 * Internal dependencies
 */
import {
	reducer,
	emitEvent,
	emitEventWithAbort,
	emitterCallback,
} from '../../shared/event-emit';

const EMIT_TYPES = {
	PAYMENT_PROCESSING: 'payment_processing',
};

/**
 * Receives a reducer dispatcher and returns an object with the
 * various event emitters for the payment processing events.
 *
 * Calling the event registration function with the callback will register it
 * for the event emitter and will return a dispatcher for removing the
 * registered callback (useful for implementation in `useEffect`).
 *
 * @param {Function} dispatcher The emitter reducer dispatcher.
 *
 * @return {Object} An object with the various payment event emitter
 *                  registration functions
 */
const emitterSubscribers = ( dispatcher ) => ( {
	onPaymentProcessing: emitterCallback(
		EMIT_TYPES.PAYMENT_PROCESSING,
		dispatcher
	),
} );

export {
	EMIT_TYPES,
	emitterSubscribers,
	reducer,
	emitEvent,
	emitEventWithAbort,
};
