<?php

/*
 * Prevent duplicate recerrence when using [events_list view="grid" scope="future"]
 */

add_filter( 'em_events_output_events', function( $events, $events_count, $args ) {

	$unique_events    = array();
	$seen_recurrences = array();
	$today            = current_time( 'Y-m-d' );

	foreach ( $events as $EM_Event ) {

		if (
			! empty( $EM_Event->event_type ) &&
			$EM_Event->event_type === 'recurrence' &&
			in_array( $args['scope'] ?? '', array( 'all', 'future' ), true )
		) {

			$recurrence_id = $EM_Event->post_id;

			// Skip past recurrence events.
			if ( $EM_Event->event_end_date < $today ) {
				continue;
			}

			// Skip duplicate recurrence events.
			if ( in_array( $recurrence_id, $seen_recurrences, true ) ) {
				continue;
			}

			// Mark this recurrence as seen.
			$seen_recurrences[] = $recurrence_id;
		}

		$unique_events[] = $EM_Event;
	}

	return $unique_events;

}, 10, 3 );