/**
 * External dependencies
 */
import deprecated from '@wordpress/deprecated';

/**
 * Internal dependencies
 */
import { allSettings } from './settings-init';

/**
 * Sets a value to a property on the settings state.
 *
 * @param {string}   name                        The setting property key for the
 *                                               setting being mutated.
 * @param {*}        value                       The value to set.
 * @param {Function} [filter=( val ) => val]     Allows for providing a callback
 *                                               to sanitize the setting (eg.
 *                                               ensure it's a number)
 *
 * @todo  Remove setSetting function from `@woocommerce/settings`.
 *
 *  The `wc.wcSettings.setSetting` function was deprecated beginning with WooCommerce Blocks 3.2.0
 *  and can be removed completely with WooCommerce Blocks 3.8.0 (that gives 6 versions of the
 *  feature plugin for warning and 3 versions of WooCommerce core).
 */
export function setSetting( name, value, filter = ( val ) => val ) {
	deprecated( 'setSetting', {
		version: '3.8.0',
		alternative: `a locally scoped value for "${ name }"`,
		plugin: 'WooCommerce Blocks',
		hint:
			'wc.wcSettings is a global settings configuration object that should not be mutated during a session. Hence the removal of this function.',
	} );
	allSettings[ name ] = filter( value );
}
