/**
 * Frontend functionality for the Broadcasts block and shortcode.
 *
 * @since   1.9.7.4
 *
 * @package ConvertKit
 * @author ConvertKit
 */

/**
 * Register events
 */
document.addEventListener(
	'DOMContentLoaded',
	function () {
		// Listen for click events.
		document.addEventListener(
			'click',
			function (e) {
				// Check the broadcasts pagination was clicked.
				if ( e.target.matches( 'ul.convertkit-broadcasts-pagination a' ) ) {

					e.preventDefault();

					// Get block container and build object of data-* attributes.
					let blockContainer = e.target.closest( 'div.convertkit-broadcasts' );
					let atts           = {
						display_date: blockContainer.dataset.displayDate,
						date_format: blockContainer.dataset.dateFormat,
						display_image: blockContainer.dataset.displayImage,
						display_description: blockContainer.dataset.displayDescription,
						display_read_more: blockContainer.dataset.displayReadMore,
						read_more_label: blockContainer.dataset.readMoreLabel,
						limit: blockContainer.dataset.limit,
						paginate: blockContainer.dataset.paginate,
						paginate_label_prev: blockContainer.dataset.paginateLabelPrev,
						paginate_label_next: blockContainer.dataset.paginateLabelNext,
						link_color: blockContainer.dataset.linkColor,
						page: e.target.dataset.page,
						nonce: e.target.dataset.nonce,
					};

					convertKitBroadcastsRender( blockContainer, atts );
				}

			}
		);
	}
);

/**
 * Sends an AJAX request to request HTML based on the supplied block attributes,
 * when pagination is used on a Broadcast block.
 *
 * @since 	1.9.7.6
 *
 * @param 	object 	blockContainer 	DOM object of the block to refresh the HTML in.
 * @param 	object 	atts 			Block attributes
 */
function convertKitBroadcastsRender( blockContainer, atts ) {

	// Append action.
	atts.action = convertkit_broadcasts.action;

	if ( convertkit_broadcasts.debug ) {
		console.log( 'convertKitBroadcastsRender()' );
		console.log( atts );
	}

	// Show loading indicator.
	blockContainer.classList.add( 'convertkit-broadcasts-loading' );

	// Fetch HTML.
	fetch(
		convertkit_broadcasts.ajax_url,
		{
			method: 'POST',
			headers: {
				'Content-Type': 'application/x-www-form-urlencoded',
			},
			body: new URLSearchParams( atts ),
		}
	)
	.then(
		function ( response ) {
			if ( convertkit_broadcasts.debug ) {
				console.log( response );
			}

			return response.json();
		}
	)
	.then(
		function ( result ) {
			if ( convertkit_broadcasts.debug ) {
				console.log( result );
			}

			// Remove loading indicator.
			blockContainer.classList.remove( 'convertkit-broadcasts-loading' );

			// Replace block container's HTML with response data.
			blockContainer.innerHTML = result.data;
		}
	)
	.catch(
		function ( error ) {
			if ( convertkit.debug ) {
				console.error( error );
			}

			// Remove loading indicator.
			blockContainer.classList.remove( 'convertkit-broadcasts-loading' );
		}
	);

}
