<?php
/**
 * This template renders the Tribe Commerce ticket form
 *
 * Override this template in your own theme by creating a file at:
 * [your-theme]/tribe/tickets/tpp.php
 *
 * @deprecated 4.11.0
 *
 * @since 4.5
 * @since 4.7 Make the ticket form more readable.
 * @since 4.7.6 Add support for showing description option.
 * @since 4.8.2 Add date_in_range() logic so past tickets do not show.
 * @since 4.9.3 Display login link if visitor is logged out and logging in is required to purchase.
 * @since 4.10.8 Removed the date_in_range() check per ticket, since it now happens upstream. Better checking of max quantity available.
 * @since 4.10.10 Use customizable ticket name functions.
 * @since 4.11.1 Corrected amount of available/remaining tickets when threshold is empty.
 * @since 4.11.3 Updated the button to include a type - helps avoid submitting forms unintentionally.
 * @since 4.11.3 Changed button ID to match the format of the non-tpp buttons. (`tribe-tickets` instead of `buy-tickets`)
 * @since 4.11.5 Display total available separately from setting max allowed to purchase at once and avoid the
 *                    potential of `$readable_amount` being a undefined variable.
 * @since 5.9.1 Corrected template override filepath
 *
 * @version    5.9.1
 *
 * @var bool $must_login
 * @var bool $display_login_link
 */

$is_there_any_product_to_sell = false;

/** @var Tribe__Tickets__Commerce__PayPal__Main $commerce */
$commerce = tribe( 'tickets.commerce.paypal' );

$messages       = $commerce->get_messages();
$messages_class = $messages ? 'tribe-tpp-message-display' : '';
$now            = time();
$cart_url       = '';

/** @var Tribe__Settings_Manager $settings_manager */
$settings_manager = tribe( 'settings.manager' );

$threshold = $settings_manager::get_option( 'ticket-display-tickets-left-threshold', 0 );

/**
 * Overwrites the threshold to display "# tickets left".
 *
 * @since 4.11.1
 *
 * @param array $data      Ticket data.
 * @param int   $post_id   WP_Post/Event ID.
 * @param int   $threshold Stock threshold to trigger display of "# tickets left"
 */
$threshold = absint( apply_filters( 'tribe_display_tickets_block_tickets_left_threshold', $threshold, tribe_events_get_ticket_event( $ticket ) ) );
?>
<form
	id="tpp-tribe-tickets"
	action="<?php echo esc_url( $cart_url ); ?>"
	class="tribe-tickets-tpp cart <?php echo esc_attr( $messages_class ); ?>"
	method="post"
	enctype='multipart/form-data'
>
	<input type="hidden" name="provider" value="Tribe__Tickets__Commerce__PayPal__Main">
	<input type="hidden" name="add" value="1">
	<h2 class="tribe-events-tickets-title tribe--tpp">
		<?php echo esc_html( tribe_get_ticket_label_plural( basename( __FILE__ ) ) ); ?>
	</h2>

	<div class="tribe-tpp-messages">
		<?php
		if ( $messages ) {
			foreach ( $messages as $message ) {
				?>
				<div class="tribe-tpp-message tribe-tpp-message-<?php echo esc_attr( $message->type ); ?>">
					<?php echo esc_html( $message->message ); ?>
				</div>
				<?php
			}//end foreach
		}//end if
		?>

		<div
			class="tribe-tpp-message tribe-tpp-message-error tribe-tpp-message-confirmation-error" style="display:none;">
			<?php esc_html_e( 'Please fill in the ticket confirmation name and email fields.', 'event-tickets' ); ?>
		</div>
	</div>

	<table class="tribe-events-tickets tribe-events-tickets-tpp">
		<?php
		/** @var Tribe__Tickets__Tickets_Handler $handler */
		$handler = tribe( 'tickets.handler' );

		$item_counter = 1;

		foreach ( $tickets as $ticket ) {
			if ( ! $ticket instanceof Tribe__Tickets__Ticket_Object ) {
				continue;
			}

			// if the ticket isn't a Tribe Commerce ticket, then let's skip it
			if (
				! $ticket instanceof Tribe__Tickets__Ticket_Object
				|| 'Tribe__Tickets__Commerce__PayPal__Main' !== $ticket->provider_class
			) {
				continue;
			}

			$available = $ticket->available();

			/**
			 * Allows hiding of "unlimited" to be toggled on/off conditionally.
			 *
			 * @since 4.11.1
			 *
			 * @param int $show_unlimited allow showing of "unlimited".
			 */
			$show_unlimited = apply_filters( 'tribe_tickets_block_show_unlimited_availability', false, $available );

			$is_there_any_product_to_sell = 0 !== $available;

			$max_at_a_time = $handler->get_ticket_max_purchase( $ticket->ID );
			?>
			<tr>
				<td class="tribe-ticket quantity" data-product-id="<?php echo esc_attr( $ticket->ID ); ?>">
					<input type="hidden" name="product_id[]" value="<?php echo absint( $ticket->ID ); ?>">
					<?php if ( $is_there_any_product_to_sell ) : ?>
						<input
							type="number"
							class="tribe-tickets-quantity qty"
							step="1"
							min="0"
							max="<?php echo esc_attr( $max_at_a_time ); ?>"
							name="quantity_<?php echo absint( $ticket->ID ); ?>"
							value="0"
							<?php disabled( $must_login ); ?>
						>
						<?php
						$readable_amount = tribe_tickets_get_readable_amount( $available, null, false );

						if ( - 1 !== $available && ( 0 === $threshold || $available <= $threshold ) ) :
						?>
							<span class="tribe-tickets-remaining">
							<?php
							echo sprintf( esc_html__( '%1$s available', 'event-tickets' ), '<span class="available-stock" data-product-id="' . esc_attr( $ticket->ID ) . '">' . esc_html( $readable_amount ) . '</span>' );
							?>
							</span>
						<?php elseif ( $show_unlimited ): ?>
							<span class="available-stock" data-product-id="<?php echo esc_attr( $ticket->ID ); ?>"><?php echo esc_html( $readable_amount ); ?></span>
						<?php endif; ?>
					<?php else: ?>
						<span class="tickets_nostock"><?php esc_html_e( 'Out of stock!', 'event-tickets' ); ?></span>
					<?php endif; ?>
				</td>
				<td class="tickets_name">
					<?php echo esc_html( $ticket->name ); ?>
				</td>
				<td class="tickets_price">
					<?php echo $this->main->get_price_html( $ticket->ID ); ?>
				</td>
				<td class="tickets_description" colspan="2">
					<?php echo esc_html( ( $ticket->show_description() ? $ticket->description : '' ) ); ?>
				</td>
				<td class="tickets_submit">
					<?php if ( ! $must_login ) : ?>
						<button
							type="submit"
							class="tpp-submit tribe-button"
						>
							<?php esc_html_e( 'Buy now', 'event-tickets' ); ?>
						</button>
					<?php endif; ?>
				</td>
			</tr>
			<?php

			/**
			 * Allows injection of HTML after an Tribe Commerce ticket table row
			 *
			 * @var WP_Post                       $post The post object the ticket is attached to.
			 * @var Tribe__Tickets__Ticket_Object $ticket
			 */
			do_action( 'event_tickets_tpp_after_ticket_row', tribe_events_get_ticket_event( $ticket->id ), $ticket );
		}

		$is_there_any_message_to_show = ! is_user_logged_in() && ( $must_login && $display_login_link );
		?>

		<?php if ( $is_there_any_product_to_sell && $is_there_any_message_to_show ) : ?>
			<tr>
				<td colspan="5" class="tpp-add">
					<?php if ( $must_login ) : ?>
						<?php include tribe( 'tickets.commerce.paypal' )->getTemplateHierarchy( 'login-to-purchase' ); ?>
					<?php endif; ?>
					<?php if ( ! $must_login && $display_login_link ) : ?>
						<?php include tribe( 'tickets.commerce.paypal' )->getTemplateHierarchy( 'login-before-purchase' ); ?>
					<?php endif; ?>
				</td>
			</tr>
		<?php endif ?>

		<?php if ( tribe( 'tickets.commerce.paypal.cart' )->has_items() ) : ?>
			<tr>
				<td colspan="5" class="tpp-add">
					<?php include tribe( 'tickets.commerce.paypal' )->getTemplateHierarchy( 'tickets/tpp-return-to-cart' ); ?>
				</td>
			</tr>
		<?php endif ?>

		<noscript>
			<tr>
				<td class="tribe-link-tickets-message">
					<div class="no-javascript-msg"><?php esc_html_e( 'You must have JavaScript activated to purchase tickets. Please enable JavaScript in your browser.', 'event-tickets' ); ?></div>
				</td>
			</tr>
		</noscript>
	</table>
</form>
