/* global wpforms_gutenberg_form_selector */
/* jshint es3: false, esversion: 6 */
/**
 * @param strings.custom_css
 * @param strings.custom_css_notice
 * @param strings.copy_paste_settings
 * @param strings.copy_paste_notice
 */
/**
 * Gutenberg editor block.
 *
 * Advanced Settings module.
 *
 * @since 1.8.8
 */
export default ( function( $ ) {
	/**
	 * WP core components.
	 *
	 * @since 1.8.8
	 */
	const { addFilter } = wp.hooks;
	const { createHigherOrderComponent } = wp.compose;
	const { Fragment }	= wp.element;
	const { InspectorAdvancedControls } = wp.blockEditor || wp.editor;
	const { TextareaControl } = wp.components;
	/**
	 * Localized data aliases.
	 *
	 * @since 1.8.8
	 */
	const { strings } = wpforms_gutenberg_form_selector;
	/**
	 * Public functions and properties.
	 *
	 * @since 1.8.8
	 *
	 * @type {Object}
	 */
	const app = {
		/**
		 * Initialize module.
		 *
		 * @since 1.8.8
		 *
		 * @param {Object} commonModule Common module.
		 */
		init( commonModule ) {
			app.common = commonModule;
			app.hooks();
			app.events();
		},
		/**
		 * Hooks.
		 *
		 * @since 1.8.8
		 */
		hooks() {
			addFilter(
				'editor.BlockEdit',
				'editorskit/custom-advanced-control',
				app.withAdvancedControls
			);
		},
		/**
		 * Events.
		 *
		 * @since 1.8.8
		 */
		events() {
			$( document )
				.on( 'focus click', 'textarea', app.copyPasteFocus );
		},
		/**
		 * Copy / Paste Style Settings textarea focus event.
		 *
		 * @since 1.8.8
		 */
		copyPasteFocus() {
			const $input = $( this );
			if ( $input.siblings( 'label' ).text() === strings.copy_paste_settings ) {
				// Select all text, so it's easier to copy and paste value.
				$input.select();
			}
		},
		/**
		 * Get fields.
		 *
		 * @since 1.8.8
		 *
		 * @param {Object} props Block properties.
		 *
		 * @return {Object} Inspector advanced controls JSX code.
		 */
		getFields( props ) {
			// Proceed only for WPForms block and when form ID is set.
			if ( props?.name !== 'wpforms/form-selector' || ! props?.attributes?.formId ) {
				return null;
			}
			// Common event handlers.
			const handlers = app.common.getSettingsFieldsHandlers( props );
			return (
				
					
						 handlers.attrChange( 'customCss', value ) }
						/>
						
						 handlers.pasteSettings( value ) }
						/>
						
					 
				
			);
		},
		/**
		 * Add controls on Advanced Settings Panel.
		 *
		 * @param {Function} BlockEdit Block edit component.
		 *
		 * @return {Function} BlockEdit Modified block edit component.
		 */
		withAdvancedControls: createHigherOrderComponent(
			( BlockEdit ) => {
				return ( props ) => {
					return (
						
							
							{ app.getFields( props ) }
						
					);
				};
			},
			'withAdvancedControls'
		),
	};
	// Provide access to public functions/properties.
	return app;
}( jQuery ) );