<?php
/**
 * Echo comments fragments.
 *
 * @package SplendorStudio\Framework\Templates\Fragments
 *
 * @since   1.0.0
 */

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comments_list_before_markup', 'fancify_lite_comments_title' );
/**
 * Echo the comments title.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comments_title() {
	global $post;
	$post_type= get_post_type( $post->ID );
	if( 'post' == $post_type ){
		fancify_lite_open_markup_e( 'fancify_lite_comments_title', 'h2' );

		fancify_lite_output_e(
			'fancify_lite_comments_title_text', sprintf(
					// translators: Number of comments, one or many.
				_n( '%s Comment', '%s Comments', get_comments_number(), 'fancify-lite' ),
				number_format_i18n( get_comments_number() )
			)
		);

		fancify_lite_close_markup_e( 'fancify_lite_comments_title', 'h2' );
	}
}


Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comment_header', 'fancify_lite_comment_avatar', 5 );
/**
 * Echo the comment avatar.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_avatar() {
	global $comment;

	// Stop here if no avatar.
	$avatar = get_avatar( $comment, $comment->args['avatar_size'] );

	if ( ! $avatar ) {
		return;
	}

	fancify_lite_open_markup_e( 'fancify_lite_comment_avatar', 'div', array( 'class' => 'fancify-comment-avatar' ) );

	fancify_lite_output_e( 'fancify_lite_comment_avatar', $avatar );

	fancify_lite_close_markup_e( 'fancify_lite_comment_avatar', 'div' );
}

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comment_header', 'fancify_lite_comment_author' );
/**
 * Echo the comment author title.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_author() {
	fancify_lite_open_markup_e(
		'fancify_lite_comment_title',
		'div',
		array(
			'class'     => 'fancify-comment-title',
			'itemprop'  => 'author',
			'itemscope' => 'itemscope',
			'itemtype'  => 'https://schema.org/Person',
		)
	);


	fancify_lite_open_markup_e( 'fancify_lite_comment_title_holder', 'div', array( 'class' => 'fancify-comment-title-holder' ) );
	fancify_lite_open_markup_e( 'fancify_lite_comment_title_text', 'div', array( 'class' => 'fancify-comment-title-text' ) );

	fancify_lite_output_e( 'fancify_lite_trackback_text', get_comment_author_link() );

	fancify_lite_close_markup_e( 'fancify_lite_comment_title_text', 'div' );
	fancify_lite_comment_links();

	fancify_lite_close_markup_e( 'fancify_lite_comment_title_holder', 'div' );
	fancify_lite_comment_metadata();
	fancify_lite_close_markup_e( 'fancify_lite_comment_title', 'div' );
}

/**
 * Echo the comment links.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_links() {
	global $comment;

	fancify_lite_open_markup_e( 'fancify_lite_comment_links', 'ul', array( 'class' => 'fancify-comment-links' ) );

	// Reply.
	echo get_comment_reply_link( // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped -- Echoes HTML output.
		array_merge(
			$comment->args, array(
				'add_below' => 'comment-content',
				'depth'     => $comment->depth,
				'max_depth' => $comment->args['max_depth'],
				'before'    => fancify_lite_open_markup( 'fancify_lite_comment_item[_reply]', 'li' ),
				'after'     => fancify_lite_close_markup( 'fancify_lite_comment_item[_reply]', 'li' ),
			)
		)
	);

	// Edit.
	if ( current_user_can( 'moderate_comments' ) ) :
		fancify_lite_open_markup_e( 'fancify_lite_comment_item[_edit]', 'li' );

		fancify_lite_open_markup_e(
			'fancify_lite_comment_item_link[_edit]',
			'a',
			array(
				'href' => esc_url( get_edit_comment_link( $comment->comment_ID ) ),
			)
		);

		fancify_lite_output_e( 'fancify_lite_comment_edit_text', esc_html__( 'Edit', 'fancify-lite' ) );

		fancify_lite_close_markup_e( 'fancify_lite_comment_item_link[_edit]', 'a' );

		fancify_lite_close_markup_e( 'fancify_lite_comment_item[_edit]', 'li' );
	endif;

	// Link.
	fancify_lite_open_markup_e( 'fancify_lite_comment_item[_link]', 'li' );

	fancify_lite_open_markup_e(
		'fancify_lite_comment_item_link[_link]',
		'a',
		array(
				'href' => esc_url( get_comment_link( $comment->comment_ID ) ),
			)
	);

	fancify_lite_output_e( 'fancify_lite_comment_link_text', esc_html__( 'Link', 'fancify-lite' ) );

	fancify_lite_close_markup_e( 'fancify_lite_comment_item_link[_link]', 'a' );

	fancify_lite_close_markup_e( 'fancify_lite_comment_item[_link]', 'li' );

	fancify_lite_close_markup_e( 'fancify_lite_comment_links', 'ul' );
}

/**
 * Echo the comment metadata.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_metadata() {
	fancify_lite_open_markup_e( 'fancify_lite_comment_meta', 'div', array( 'class' => 'fancify-comment-meta' ) );

		fancify_lite_open_markup_e(
			'fancify_lite_comment_time',
			'time',
			array(
				'datetime' => get_comment_time( 'c' ),
				'itemprop' => 'datePublished',
			)
		);

			fancify_lite_output_e(
				'fancify_lite_comment_time_text', sprintf(
					// translators: Date of the comment, time of the comment.
					_x( '%1$s at %2$s', '1: date, 2: time', 'fancify-lite' ),
					get_comment_date(),
					get_comment_time()
				)
			);

		fancify_lite_close_markup_e( 'fancify_lite_comment_time', 'time' );

	fancify_lite_close_markup_e( 'fancify_lite_comment_meta', 'div' );
}

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comment_title_append_markup', 'fancify_lite_comment_badges' );
/**
 * Echo the comment badges.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_badges() {
	global $comment;

	// Trackback badge.
	if ( 'trackback' === $comment->comment_type ) {
		fancify_lite_open_markup_e( 'fancify_lite_trackback_badge', 'span', array( 'class' => 'fancify-badge fancify-margin-small-left' ) );

		fancify_lite_output_e( 'fancify_lite_trackback_text', esc_html__( 'Trackback', 'fancify-lite' ) );

		fancify_lite_close_markup_e( 'fancify_lite_trackback_badge', 'span' );
	}

	// Pindback badge.
	if ( 'pingback' === $comment->comment_type ) {
		fancify_lite_open_markup_e( 'fancify_lite_pingback_badge', 'span', array( 'class' => 'fancify-badge fancify-margin-small-left' ) );

		fancify_lite_output_e( 'fancify_lite_pingback_text', esc_html__( 'Pingback', 'fancify-lite' ) );

		fancify_lite_close_markup_e( 'fancify_lite_pingback_badge', 'span' );
	}

	// Moderation badge.
	if ( '0' === $comment->comment_approved ) {
		fancify_lite_open_markup_e( 'fancify_lite_moderation_badge', 'span', array( 'class' => 'fancify-badge fancify-margin-small-left fancify-badge-warning' ) );

		fancify_lite_output_e( 'fancify_lite_moderation_text', esc_html__( 'Awaiting Moderation', 'fancify-lite' ) );

		fancify_lite_close_markup_e( 'fancify_lite_moderation_badge', 'span' );
	}

	// Moderator badge.
	if ( user_can( $comment->user_id, 'moderate_comments' ) ) {
		fancify_lite_open_markup_e( 'fancify_lite_moderator_badge', 'span', array( 'class' => 'fancify-badge fancify-margin-small-left' ) );

		fancify_lite_output_e( 'fancify_lite_moderator_text', esc_html__( 'Moderator', 'fancify-lite' ) );

		fancify_lite_close_markup_e( 'fancify_lite_moderator_badge', 'span' );
	}
}


Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comment_content', 'fancify_lite_comment_content' );
/**
 * Echo the comment content.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_content() {
	fancify_lite_output_e( 'fancify_lite_comment_content', fancify_lite_render_function( 'comment_text' ) );
}


Fancify_Lite_Actions::add_smart_action( 'fancify_lite_no_comment', 'fancify_lite_no_comment' );
/**
 * Echo no comment content.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_no_comment() {
	fancify_lite_open_markup_e( 'fancify_lite_no_comment', 'p', 'class=fancify-text-muted' );

	fancify_lite_output_e( 'fancify_lite_no_comment_text', esc_html__( 'No comment yet, add your voice below!', 'fancify-lite' ) );

	fancify_lite_close_markup_e( 'fancify_lite_no_comment', 'p' );
}

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comments_closed', 'fancify_lite_comments_closed' );
/**
 * Echo closed comments content.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comments_closed() {
	fancify_lite_open_markup_e( 'fancify_lite_comments_closed', 'p', array( 'class' => 'fancify-alert fancify-alert-warning fancify-margin-bottom-remove' ) );

	fancify_lite_output_e( 'fancify_lite_comments_closed_text', esc_html__( 'Comments are closed for this article!', 'fancify-lite' ) );

	fancify_lite_close_markup_e( 'fancify_lite_comments_closed', 'p' );
}

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_comments_list_after_markup', 'fancify_lite_comments_navigation' );
/**
 * Echo comments navigation.
 *
 * @since 1.0.0
 *
 * @return void
 *
 * phpcs:disable Generic.WhiteSpace.ScopeIndent.IncorrectExact -- Layout mirrors HTML markup.
 */
function fancify_lite_comments_navigation() {
	if ( get_comment_pages_count() <= 1 && ! get_option( 'page_comments' ) ) {
		return;
	}

	fancify_lite_open_markup_e(
		'fancify_lite_comments_navigation_nav_container',
		'nav',
		array(
			'role'       => 'navigation',
			'aria-label' => esc_attr__( 'Comments Pagination Navigation', 'fancify-lite' ),
		)
	);

	fancify_lite_open_markup_e(
		'fancify_lite_comments_navigation',
		'ul',
		array(
			'class' => 'fancify-pagination',
		)
	);

	// Previous.
	if ( get_previous_comments_link() ) {
		fancify_lite_open_markup_e( 'fancify_lite_comments_navigation_item[_previous]', 'li', array( 'class' => 'fancify-pagination-previous' ) );

		$previous_icon  = fancify_lite_open_markup(
			'fancify_lite_previous_icon[_comments_navigation]',
			'span',
			array(
				'class'       => 'fancify-icon-angle-double-left fancify-margin-small-right',
				'aria-hidden' => 'true',
			)
		);
		$previous_icon .= fancify_lite_close_markup( 'fancify_lite_previous_icon[_comments_navigation]', 'span' );

		echo get_previous_comments_link( // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped -- Echoes HTML output.
			$previous_icon . fancify_lite_output( 'fancify_lite_previous_text[_comments_navigation]', esc_html__( 'Previous Comments', 'fancify-lite' ) )
		);

		fancify_lite_close_markup_e( 'fancify_lite_comments_navigation_item[_previous]', 'li' );
	}

	// Next.
	if ( get_next_comments_link() ) {
		fancify_lite_open_markup_e( 'fancify_lite_comments_navigation_item[_next]', 'li', array( 'class' => 'fancify-pagination-next' ) );

		$next_icon  = fancify_lite_open_markup(
			'fancify_lite_next_icon[_comments_navigation]',
			'span',
			array(
				'class'       => 'fancify-icon-angle-double-right fancify-margin-small-right',
				'aria-hidden' => 'true',
			)
		);
		$next_icon .= fancify_lite_close_markup( 'fancify_lite_next_icon[_comments_navigation]', 'span' );

		echo get_next_comments_link( // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped -- Echoes HTML output.
			fancify_lite_output( 'fancify_lite_next_text[_comments_navigation]', esc_html__( 'Next Comments ', 'fancify-lite' ) ) . $next_icon
		);

		fancify_lite_close_markup_e( 'fancify_lite_comments_navigation_item_[_next]', 'li' );
	}

	fancify_lite_close_markup_e( 'fancify_lite_comments_navigation', 'ul' );

	fancify_lite_close_markup_e( 'fancify_lite_comments_navigation_nav_container', 'nav' );
}

Fancify_Lite_Actions::add_smart_action( 'fancify_lite_after_open_comments', 'fancify_lite_comment_form' );
/**
 * Echo comment navigation.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_form() {
	$output = fancify_lite_open_markup( 'fancify_lite_comment_form_wrap', 'div', array( 'class' => 'fancify-form fancify-comment-form-wrap' ) );

	$output .= fancify_lite_render_function( 'comment_form', array( 'title_reply' => fancify_lite_output( 'fancify_lite_comment_form_title_text', esc_html__( 'Leave a Reply', 'fancify-lite' ) ) ) );

	$output .= fancify_lite_close_markup( 'fancify_lite_comment_form_wrap', 'div' );

	$submit = fancify_lite_open_markup(
		'fancify_lite_comment_form_submit',
		'button',
		array(
			'class' => 'fancify-button fancify-button-primary',
			'type'  => 'submit',
		)
	);

	$submit .= fancify_lite_output( 'fancify_lite_comment_form_submit_text', esc_html__( 'SEND NOW', 'fancify-lite' ) );

	$submit .= fancify_lite_close_markup( 'fancify_lite_comment_form_submit', 'button' );

	// WordPress, please make it easier for us.
	echo preg_replace( '#<input[^>]+type="submit"[^>]+>#', $submit, $output ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped -- Escaped above or as an attribute.
}

Fancify_Lite_Actions::add_smart_action( 'cancel_comment_reply_link', 'fancify_lite_comment_cancel_reply_link', 10, 3 );
/**
 * Echo comment cancel reply link.
 *
 * This function replaces the default WordPress comment cancel reply link.
 *
 * @since 1.0.0
 *
 * @param string $html HTML.
 * @param string $link Cancel reply link.
 * @param string $text Text to output.
 *
 * @return string
 */
function fancify_lite_comment_cancel_reply_link( $html, $link, $text ) {
	$output = fancify_lite_open_markup(
		'fancify_lite_comment_cancel_reply_link',
		'a',
		array(
			'rel'   => 'nofollow',
			'id'    => 'cancel-comment-reply-link',
			'class' => 'fancify-button fancify-button-small fancify-button-danger fancify-margin-small-right',
			// phpcs:ignore WordPress.CSRF.NonceVerification.NoNonceVerification -- Used to determine inline style.
			'style' => isset( $_GET['replytocom'] ) ? '' : 'display:none;',
			'href'  => esc_url( $link ), // Automatically escaped.
		)
	);

	$output .= fancify_lite_output( 'fancify_lite_comment_cancel_reply_link_text', esc_html( $text ) );

	$output .= fancify_lite_close_markup( 'fancify_lite_comment_cancel_reply_link', 'a' );

	return $output;
}

Fancify_Lite_Actions::add_smart_action( 'comment_form_field_comment', 'fancify_lite_comment_form_comment' );
/**
 * Echo comment textarea field.
 *
 * This function replaces the default WordPress comment textarea field.
 *
 * @since 1.0.0
 *
 * @return string
 */
function fancify_lite_comment_form_comment() {
	$output = fancify_lite_open_markup( 'fancify_lite_comment_form[_comment]', 'fieldset', array( 'class' => 'fancify-comment-form-textarea-container' ) );

	/**
	 * Input label for screen readers.
	 *
	 * @since 1.0.0
	 */
	$output .= fancify_lite_open_markup(
		'fancify_lite_comment_form_field[_label]', 'label', array(
			'class'    => 'screen-reader-text',
			'for'     => 'comment',
		)
	);
	$output .= fancify_lite_close_markup( 'fancify_lite_comment_form_field[_label]', 'label' );

	/**
	 * Filter whether the comment form textarea legend should load or not.
	 *
	 * @since 1.0.0
	 */
	$output .= fancify_lite_open_markup(
		'fancify_lite_comment_form_field[_comment]', 'textarea', array(
			'id'       		=> 'comment',
			'class'    		=> 'fancify-comment-form-textarea',
			'name'     		=> 'comment',
			'placeholder' 	=> esc_attr( 'Your Comment *', 'fancify'),
			'required' 		=> '',
			'rows'     		=> 8,
		)
	);

	$output .= fancify_lite_close_markup( 'fancify_lite_comment_form_field[_comment]', 'textarea' );

	$output .= fancify_lite_close_markup( 'fancify_lite_comment_form[_comment]', 'fieldset' );

	return $output;
}

Fancify_Lite_Actions::add_smart_action( 'comment_form_before_fields', 'fancify_lite_comment_before_fields', 9999 );
/**
 * Echo comment fields opening wraps.
 *
 * This function must be attached to the WordPress 'comment_form_before_fields' action which is only called if
 * the user is not logged in.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_before_fields() {
	fancify_lite_open_markup_e( 'fancify_lite_comment_fields_wrap', 'div', array( 'class' => 'fancify-comment-fields-wrap' ) );

	fancify_lite_open_markup_e(
		'fancify_lite_comment_fields_inner_wrap', 'div', array(
			'class'               		=> 'fancify-comment-input-container',
			'data-fancify-grid-margin' 	=> '',
		)
	);
}

Fancify_Lite_Actions::add_smart_action( 'comment_form_default_fields', 'fancify_lite_comment_form_fields' );
/**
 * Modify comment form fields.
 *
 * This function replaces the default WordPress comment fields.
 *
 * @since 1.0.0
 *
 * @param array $fields The WordPress default fields.
 *
 * @return array The modified fields.
 */
function fancify_lite_comment_form_fields( $fields ) {
	$commenter = wp_get_current_commenter();
	$grid      = count( (array) $fields );

	// Author.
	if ( isset( $fields['author'] ) ) {

		$author = fancify_lite_open_markup( 'fancify_lite_comment_form[_name]', 'div', array( 'class' => " fancify-col-md-6 fancify-col-xs-12" ) );

		/**
		* label for screen readers.
		*
		* @since 1.0.0
		*/
		$author .= fancify_lite_open_markup(
			'fancify_lite_comment_form_field[_label]', 'label', array(
				'class'    	=> 'screen-reader-text',
				'for'     	=> 'author',
			)
		);
		$author .= fancify_lite_close_markup( 'fancify_lite_comment_form_field[_label]', 'label' );

		$author .= fancify_lite_selfclose_markup(
			'fancify_lite_comment_form_field[_name]', 'input', array(
				'id'       		=> 'author',
				'class'    		=> 'fancify-comment-name-input',
				'type'     		=> 'text',
				'value'    		=> esc_attr( $commenter['comment_author'] ),
				'name'     		=> 'author',
				'required' 		=> 'required',
				'placeholder'	=> esc_attr__("Enter your name *", 'fancify-lite')
			)
		);

		$author .= fancify_lite_close_markup( 'fancify_lite_comment_form[_name]', 'div' );

		$fields['author'] = $author;
	}

	// Email.
	if ( isset( $fields['email'] ) ) {
		$email = fancify_lite_open_markup( 'fancify_lite_comment_form[_email]', 'div', array( 'class' => " fancify-col-md-6 fancify-col-xs-12" ) );

		/**
		* label for screen readers.
		*
		* @since 1.0.0
		*/
		$email .= fancify_lite_open_markup(
			'fancify_lite_comment_form_field[_label]', 'label', array(
				'class'    => 'screen-reader-text',
				'for'     => 'email',
			)
		);
		$email .= fancify_lite_close_markup( 'fancify_lite_comment_form_field[_label]', 'label' );

		$email .= fancify_lite_selfclose_markup(
			'fancify_lite_comment_form_field[_email]', 'input', array(
				'id'       		=> 'email',
				'class'    		=> 'fancify-comment-email-input',
				'type'     		=> 'text',
				'value'    		=> esc_attr( $commenter['comment_author_email'] ),
				'name'			=> 'email',
				'required'		=> get_option( 'require_name_email' ) ? 'required' : null,
				'placeholder'	=> esc_attr__( "Enter your email *", 'fancify-lite' )

			)
		);

		$email .= fancify_lite_close_markup( 'fancify_lite_comment_form[_email]', 'div' );

		$fields['email'] = $email;
	}

	$fields['url'] = '';

	return $fields;
}

Fancify_Lite_Actions::add_smart_action( 'comment_form_after_fields', 'fancify_lite_comment_form_after_fields', 3 );
/**
 * Echo comment fields closing wraps.
 *
 * This function must be attached to the WordPress 'comment_form_after_fields' action which is only called if
 * the user is not logged in.
 *
 * @since 1.0.0
 *
 * @return void
 */
function fancify_lite_comment_form_after_fields() {
	fancify_lite_close_markup_e( 'fancify_lite_comment_fields_inner_wrap', 'div' );

	fancify_lite_close_markup_e( 'fancify_lite_comment_fields_wrap', 'div' );
}