( ( $ ) => {
	const currentFilters = {
		trackday_pager: {
			current_page: 1,
			per_page: 5,
			total_items: null,
			total_pages: null
		}
	};

	const group_event_body = $( '#trackday-group-event-body' );

	$( document ).on( 'click', '.group-event__courses .trackday-group-event-pager-info button', pagerReporting );

	$( '.group-event__courses .trackday-group-event-pager-info' ).hide();
	loadReportingTable();

	/**
	 * Initialize Tablesorter Reporting Tables
	 */
	function loadReportingTable() {
		$.when(
			$.ajax( {
				url: trackday_settings.ajaxurl,
				method: 'get',
				dataType: 'json',
				data: {
					'action': 'trackday_group_event_template',
					'filters': currentFilters,
					'nonce': trackday_settings.nonce,
				}
			})
		).done( function( response ) {
			if (typeof response.data.rows_html !== 'undefined') {

				group_event_body.html( response.data.rows_html );
			}

			if ( typeof response.data.pager !== 'undefined') {

				// save the reporting pager details.
				currentFilters.trackday_pager = response.data.pager;

				$( '.group-event__courses .trackday-group-event-pager-info' ).show();
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.current_page' ).html( response.data.pager.current_page );
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.total_pages' ).html( response.data.pager.total_pages );
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.total_items' ).html( response.data.pager.total_items );

				if ( parseInt( response.data.pager.current_page ) == 1 ) {
					$( '.group-event__courses .trackday-group-event-pager-info button.first' ).attr( 'disabled', true );
					$( '.group-event__courses .trackday-group-event-pager-info button.prev' ).attr( 'disabled', true );
				} else {
					$( '.group-event__courses .trackday-group-event-pager-info button.first' ).attr( 'disabled', false );
					$( '.group-event__courses .trackday-group-event-pager-info button.prev' ).attr( 'disabled', false );
				}

				if ( parseInt( response.data.pager.current_page ) == parseInt( response.data.pager.total_pages ) ) {
					$( '.group-event__courses .trackday-group-event-pager-info button.last' ).attr( 'disabled', true );
					$( '.group-event__courses .trackday-group-event-pager-info button.next' ).attr( 'disabled', true );
				} else {
					$( '.group-event__courses .trackday-group-event-pager-info button.last' ).attr( 'disabled', false );
					$( '.group-event__courses .trackday-group-event-pager-info button.next' ).attr( 'disabled', false );
				}
			} else {
				currentFilters.trackday_pager = {};
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.current_page' ).html( '0' );
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.total_pages' ).html( '0' );
				$( '.group-event__courses .trackday-group-event-pager-info span.pagedisplay span.total_items' ).html( '0' );
				$( '.group-event__courses .trackday-group-event-pager-info' ).hide();
			}
		});
	}

	function pagerReporting( e ) {

		var pager_el = ( e.currentTarget );
		var pager_change = false;

		if ( $( pager_el ).hasClass( 'next' ) ) {
			if ( currentFilters.trackday_pager.current_page < currentFilters.trackday_pager.total_pages ) {
				pager_change = true;
				currentFilters.trackday_pager.current_page = parseInt( currentFilters.trackday_pager.current_page ) + 1;
			}
		} else if ( $( pager_el ).hasClass( 'prev' ) ) {
			if ( currentFilters.trackday_pager.current_page > 1 ) {
				pager_change = true;
				currentFilters.trackday_pager.current_page = currentFilters.trackday_pager.current_page - 1;
			}
		} else if ( $( pager_el ).hasClass( 'first' ) ) {
			if ( currentFilters.trackday_pager.current_page > 1 ) {
				pager_change = true;
				currentFilters.trackday_pager.current_page = 1;
			}
		} else if ( $( pager_el ).hasClass( 'last' ) ) {
			if ( currentFilters.trackday_pager.current_page < currentFilters.trackday_pager.total_pages ) {
				pager_change = true;
				currentFilters.trackday_pager.current_page = currentFilters.trackday_pager.total_pages;
			}
		}

		if ( pager_change == true ) {
			loadReportingTable();
		}
	}

} )( jQuery );
