/**
 * Internal dependencies
 */
import { getStateForContext } from './utils';

/**
 * Selector for retrieving a specific query-state for the given context.
 *
 * @param {Object} state    Current state.
 * @param {string} context  Context for the query-state being retrieved.
 * @param {string} queryKey Key for the specific query-state item.
 * @param {*} defaultValue  Default value for the query-state key if it doesn't
 *                          currently exist in state.
 *
 * @return {*} The currently stored value or the defaultValue if not present.
 */
export const getValueForQueryKey = (
	state,
	context,
	queryKey,
	defaultValue = {}
) => {
	let stateContext = getStateForContext( state, context );
	if ( stateContext === null ) {
		return defaultValue;
	}
	stateContext = JSON.parse( stateContext );
	return typeof stateContext[ queryKey ] !== 'undefined'
		? stateContext[ queryKey ]
		: defaultValue;
};

/**
 * Selector for retrieving the query-state for the given context.
 *
 * @param {Object} state   The current state.
 * @param {string} context The context for the query-state being retrieved.
 * @param {*} defaultValue The default value to return if there is no state for
 *                         the given context.
 *
 * @return {*} The currently stored query-state for the given context or
 *             defaultValue if not present in state.
 */
export const getValueForQueryContext = (
	state,
	context,
	defaultValue = {}
) => {
	const stateContext = getStateForContext( state, context );
	return stateContext === null ? defaultValue : JSON.parse( stateContext );
};
