<?php
/**
 * The template to display single post
 *
 * @package PANTRY
 * @since PANTRY 1.0
 */

// Full post loading
$full_post_loading          = pantry_get_value_gp( 'action' ) == 'full_post_loading';

// Prev post loading
$prev_post_loading          = pantry_get_value_gp( 'action' ) == 'prev_post_loading';
$prev_post_loading_type     = pantry_get_theme_option( 'posts_navigation_scroll_which_block' );

// Position of the related posts
$pantry_related_position   = pantry_get_theme_option( 'related_position' );

// Type of the prev/next post navigation
$pantry_posts_navigation   = pantry_get_theme_option( 'posts_navigation' );
$pantry_prev_post          = false;
$pantry_prev_post_same_cat = pantry_get_theme_option( 'posts_navigation_scroll_same_cat' );

// Rewrite style of the single post if current post loading via AJAX and featured image and title is not in the content
if ( ( $full_post_loading 
		|| 
		( $prev_post_loading && 'article' == $prev_post_loading_type )
	) 
	&& 
	! in_array( pantry_get_theme_option( 'single_style' ), array( 'style-6' ) )
) {
	pantry_storage_set_array( 'options_meta', 'single_style', 'style-6' );
}

do_action( 'pantry_action_prev_post_loading', $prev_post_loading, $prev_post_loading_type );

get_header();

while ( have_posts() ) {

	the_post();

	// Type of the prev/next post navigation
	if ( 'scroll' == $pantry_posts_navigation ) {
		$pantry_prev_post = get_previous_post( $pantry_prev_post_same_cat );  // Get post from same category
		if ( ! $pantry_prev_post && $pantry_prev_post_same_cat ) {
			$pantry_prev_post = get_previous_post( false );                    // Get post from any category
		}
		if ( ! $pantry_prev_post ) {
			$pantry_posts_navigation = 'links';
		}
	}

	// Override some theme options to display featured image, title and post meta in the dynamic loaded posts
	if ( $full_post_loading || ( $prev_post_loading && $pantry_prev_post ) ) {
		pantry_sc_layouts_showed( 'featured', false );
		pantry_sc_layouts_showed( 'title', false );
		pantry_sc_layouts_showed( 'postmeta', false );
	}

	// If related posts should be inside the content
	if ( strpos( $pantry_related_position, 'inside' ) === 0 ) {
		ob_start();
	}

	// Display post's content
	get_template_part( apply_filters( 'pantry_filter_get_template_part', 'templates/content', 'single-' . pantry_get_theme_option( 'single_style' ) ), 'single-' . pantry_get_theme_option( 'single_style' ) );

	// If related posts should be inside the content
	if ( strpos( $pantry_related_position, 'inside' ) === 0 ) {
		$pantry_content = ob_get_contents();
		ob_end_clean();

		ob_start();
		do_action( 'pantry_action_related_posts' );
		$pantry_related_content = ob_get_contents();
		ob_end_clean();

		if ( ! empty( $pantry_related_content ) ) {
			$pantry_related_position_inside = max( 0, min( 9, pantry_get_theme_option( 'related_position_inside' ) ) );
			if ( 0 == $pantry_related_position_inside ) {
				$pantry_related_position_inside = mt_rand( 1, 9 );
			}

			$pantry_p_number         = 0;
			$pantry_related_inserted = false;
			$pantry_in_block         = false;
			$pantry_content_start    = strpos( $pantry_content, '<div class="post_content' );
			$pantry_content_end      = strrpos( $pantry_content, '</div>' );

			for ( $i = max( 0, $pantry_content_start ); $i < min( strlen( $pantry_content ) - 3, $pantry_content_end ); $i++ ) {
				if ( $pantry_content[ $i ] != '<' ) {
					continue;
				}
				if ( $pantry_in_block ) {
					if ( strtolower( substr( $pantry_content, $i + 1, 12 ) ) == '/blockquote>' ) {
						$pantry_in_block = false;
						$i += 12;
					}
					continue;
				} else if ( strtolower( substr( $pantry_content, $i + 1, 10 ) ) == 'blockquote' && in_array( $pantry_content[ $i + 11 ], array( '>', ' ' ) ) ) {
					$pantry_in_block = true;
					$i += 11;
					continue;
				} else if ( 'p' == $pantry_content[ $i + 1 ] && in_array( $pantry_content[ $i + 2 ], array( '>', ' ' ) ) ) {
					$pantry_p_number++;
					if ( $pantry_related_position_inside == $pantry_p_number ) {
						$pantry_related_inserted = true;
						$pantry_content = ( $i > 0 ? substr( $pantry_content, 0, $i ) : '' )
											. $pantry_related_content
											. substr( $pantry_content, $i );
					}
				}
			}
			if ( ! $pantry_related_inserted ) {
				if ( $pantry_content_end > 0 ) {
					$pantry_content = substr( $pantry_content, 0, $pantry_content_end ) . $pantry_related_content . substr( $pantry_content, $pantry_content_end );
				} else {
					$pantry_content .= $pantry_related_content;
				}
			}
		}

		pantry_show_layout( $pantry_content );
	}

	// Comments
	do_action( 'pantry_action_before_comments' );
	comments_template();
	do_action( 'pantry_action_after_comments' );

	// Related posts
	if ( 'below_content' == $pantry_related_position
		&& ( 'scroll' != $pantry_posts_navigation || pantry_get_theme_option( 'posts_navigation_scroll_hide_related' ) == 0 )
		&& ( ! $full_post_loading || pantry_get_theme_option( 'open_full_post_hide_related' ) == 0 )
	) {
		do_action( 'pantry_action_related_posts' );
	}

	// Post navigation: type 'scroll'
	if ( 'scroll' == $pantry_posts_navigation && ! $full_post_loading ) {
		?>
		<div class="nav-links-single-scroll"
			data-post-id="<?php echo esc_attr( get_the_ID( $pantry_prev_post ) ); ?>"
			data-post-link="<?php echo esc_attr( get_permalink( $pantry_prev_post ) ); ?>"
			data-post-title="<?php the_title_attribute( array( 'post' => $pantry_prev_post ) ); ?>"
			<?php do_action( 'pantry_action_nav_links_single_scroll_data', $pantry_prev_post ); ?>
		></div>
		<?php
	}
}

get_footer();
