jQuery( document ).ready( function ( $ ) {
	// Check with the server if the pointer should be shown
	$.post(
		sureformsPointerData.ajaxurl,
		{
			action: 'should_show_pointer',
			pointer_nonce: sureformsPointerData.pointer_nonce,
		},
		function ( response ) {
			if ( ! response || ! response.show ) {
				return;
			}

			let $target = $( '#toplevel_page_sureforms_menu' );
			if ( ! $target.length ) {
				$target = $( '#menu-plugins' ); // fallback
			}

			const pointerContent =
				'<h3>' +
				response.title +
				'</h3>' +
				'<p>' +
				response.content +
				'</p>';

			let pointerClosedBy = null; // 'cta' or 'dismiss' or null

			$target
				.pointer( {
					content: pointerContent,
					position: {
						edge: 'left',
						align: 'center',
					},
					// `_event` is unused but required positionally to access `t`.
					buttons( _event, t ) {
						const dismissBtn = $(
							'<a class="close" href="#" style="margin-left:8px;"></a>'
						)
							.text( response.dismiss )
							.on( 'click.pointer', function ( e ) {
								e.preventDefault();
								pointerClosedBy = 'dismiss';
								t.element.pointer( 'close' );
								$.post( sureformsPointerData.ajaxurl, {
									action: 'sureforms_dismiss_pointer',
									pointer_nonce:
										sureformsPointerData.pointer_nonce,
								} );
							} );

						const ctaBtn = $(
							'<a class="button button-primary" href="' +
								response.button_url +
								'" style="margin-right:8px;">' +
								response.button_text +
								'</a>'
						).on( 'click.pointer', function () {
							pointerClosedBy = 'cta';
							t.element.pointer( 'close' );
							$.post( sureformsPointerData.ajaxurl, {
								action: 'sureforms_accept_cta',
								pointer_nonce:
									sureformsPointerData.pointer_nonce,
							} );
						} );

						// Wrap both buttons in a div and return as a jQuery object
						return $(
							'<div style="display:flex;justify-content:space-between;align-items:center;width:100%"></div>'
						)
							.append( ctaBtn )
							.append( dismissBtn );
					},
					close() {
						if ( ! pointerClosedBy ) {
							// Only run if closed by other means (not by our buttons)
							$.post( sureformsPointerData.ajaxurl, {
								action: 'sureforms_dismiss_pointer',
								pointer_nonce:
									sureformsPointerData.pointer_nonce,
							} );
						}
					},
				} )
				.pointer( 'open' );
		}
	);
} );
