<?php
/**
 * Shortcode for Images gallery element.
 *
 * @package woodmart
 */

if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
	exit( 'No direct script access allowed' );
}

if ( ! function_exists( 'woodmart_images_gallery_shortcode' ) ) {
	/**
	 * Images gallery shortcode
	 *
	 * @param array $atts Shortcode attributes.
	 *
	 * @return false|string
	 */
	function woodmart_images_gallery_shortcode( $atts ) {
		$output               = '';
		$class                = '';
		$gallery_classes      = '';
		$gallery_item_classes = '';
		$gallery_attrs        = '';
		$nav_classes          = '';
		$pagin_classes        = '';
		$wrapper_attrs        = '';

		$class .= apply_filters( 'vc_shortcodes_css_class', '', '', $atts );

		$parsed_atts = shortcode_atts(
			array_merge(
				woodmart_get_carousel_atts(),
				array(
					'woodmart_css_id'        => '',
					'ids'                    => '',
					'images'                 => '',
					'slides_per_view'        => 3,
					'slides_per_view_tablet' => 'auto',
					'slides_per_view_mobile' => 'auto',
					'columns'                => 3,
					'columns_tablet'         => 'auto',
					'columns_mobile'         => 'auto',
					'size'                   => '',
					'img_size'               => 'medium',
					'link'                   => '',
					'spacing'                => 30,
					'spacing_tablet'         => '',
					'spacing_mobile'         => '',
					'on_click'               => 'lightbox',
					'target_blank'           => false,
					'custom_links'           => '',
					'view'                   => 'grid',
					'caption'                => false,
					'css_animation'          => 'none',
					'lazy_loading'           => 'no',
					'horizontal_align'       => 'center',
					'vertical_align'         => 'middle',
					'el_class'               => '',
					'css'                    => '',
				)
			),
			$atts
		);

		extract( $parsed_atts ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract

		if ( ! empty( $atts['ids'] ) ) {
			$atts['images'] = $atts['ids'];
		}

		if ( ! empty( $atts['size'] ) ) {
			$atts['img_size'] = $atts['size'];
		}

		extract( $atts ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract

		if ( $horizontal_align || $vertical_align ) {
			$style = '';

			if ( $horizontal_align ) {
				$style .= '--wd-justify-content:' . $horizontal_align . ';';
			}

			if ( $vertical_align ) {
				$v_align_value = array(
					'top'    => 'flex-start',
					'middle' => 'center',
					'bottom' => 'flex-end',
				);

				$vertical_align = isset( $v_align_value[ $vertical_align ] ) ? $v_align_value[ $vertical_align ] : $vertical_align;

				$style .= '--wd-align-items:' . $vertical_align . ';';
			}

			if ( $style ) {
				$wrapper_attrs .= ' style="' . $style . '"';
			}
		}

		$carousel_id = 'gallery_' . wp_rand( 100, 999 );

		$images = explode( ',', $images );

		$class .= $el_class ? ' ' . $el_class : '';
		$class .= woodmart_get_css_animation( $css_animation );

		if ( function_exists( 'vc_shortcode_custom_css_class' ) && isset( $atts['css'] ) ) {
			$class .= ' ' . vc_shortcode_custom_css_class( $atts['css'] );
		}

		ob_start();

		if ( 'lightbox' === $on_click ) {
			$class .= ' photoswipe-images';
			woodmart_enqueue_js_library( 'photoswipe-bundle' );
			woodmart_enqueue_inline_style( 'photoswipe' );
			woodmart_enqueue_js_script( 'photoswipe-images' );
		}

		if ( 'links' === $on_click && function_exists( 'vc_value_from_safe' ) ) {
			$custom_links = vc_value_from_safe( $custom_links );
			$custom_links = explode( ',', $custom_links );
		}

		if ( 'carousel' === $view ) {
			woodmart_enqueue_js_library( 'swiper' );
			woodmart_enqueue_js_script( 'swiper-carousel' );
			woodmart_enqueue_inline_style( 'swiper' );
			$custom_sizes = apply_filters( 'woodmart_images_gallery_shortcode_custom_sizes', false );

			$parsed_atts['carousel_id']  = $carousel_id;
			$parsed_atts['custom_sizes'] = $custom_sizes;

			if ( ( 'auto' !== $slides_per_view_tablet && ! empty( $slides_per_view_tablet ) ) || ( 'auto' !== $slides_per_view_mobile && ! empty( $slides_per_view_mobile ) ) ) {
				$parsed_atts['custom_sizes'] = array(
					'desktop' => $slides_per_view,
					'tablet'  => $slides_per_view_tablet,
					'mobile'  => $slides_per_view_mobile,
				);
			}

			$gallery_attrs         = woodmart_get_carousel_attributes( $parsed_atts );
			$gallery_classes      .= ' wd-carousel wd-grid';
			$class                .= ' wd-carousel-container wd-wpb';
			$gallery_item_classes .= ' wd-carousel-item';
			$arrows_hover_style    = woodmart_get_opt( 'carousel_arrows_hover_style', '1' );

			if ( ! empty( $parsed_atts['carousel_arrows_position'] ) ) {
				$nav_classes = ' wd-pos-' . $parsed_atts['carousel_arrows_position'];
			} else {
				$nav_classes = ' wd-pos-' . woodmart_get_opt( 'carousel_arrows_position', 'sep' );
			}

			if ( 'disable' !== $arrows_hover_style ) {
				$nav_classes .= ' wd-hover-' . $arrows_hover_style;
			}

			if ( 'yes' === $scroll_carousel_init ) {
				$gallery_classes .= ' scroll-init';
			}

			if ( woodmart_get_opt( 'disable_owl_mobile_devices' ) ) {
				$class .= ' wd-carousel-dis-mb wd-off-md wd-off-sm';
			}
		}

		if ( 'grid' === $view || 'masonry' === $view ) {
			if ( 'masonry' === $view ) {
				wp_enqueue_script( 'imagesloaded' );
				woodmart_enqueue_js_library( 'isotope-bundle' );
				woodmart_enqueue_js_script( 'image-gallery-element' );

				$gallery_classes .= ' wd-grid-f-col wd-masonry';
			} else {
				$gallery_classes .= ' wd-grid-g';
			}

			$gallery_item_classes .= ' wd-col';

			$gallery_attrs .= ' style="' . woodmart_get_grid_attrs( $parsed_atts ) . '"';
		}

		if ( 'justified' === $view ) {
			woodmart_enqueue_js_library( 'justified' );
			woodmart_enqueue_inline_style( 'justified' );
			woodmart_enqueue_js_script( 'image-gallery-element' );

			$gallery_classes .= ' wd-justified';
		}

		if ( 'yes' === $lazy_loading ) {
			woodmart_lazy_loading_init( true );
			woodmart_enqueue_inline_style( 'lazy-loading' );
		}

		woodmart_enqueue_inline_style( 'image-gallery' );

		?>
		<div id="<?php echo esc_attr( $carousel_id ); ?>" class="wd-images-gallery wd-wpb<?php echo esc_attr( $class ); ?>"<?php echo wp_kses( $wrapper_attrs, true ); ?>>
			<?php if ( 'carousel' === $view ) : ?>
				<div class="wd-carousel-inner">
			<?php endif; ?>

			<div class="<?php echo esc_attr( $gallery_classes ); ?>"<?php echo wp_kses( $gallery_attrs, true ); ?>>
				<?php if ( 'carousel' === $view ) : ?>
					<div class="wd-carousel-wrap">
				<?php endif; ?>

				<?php if ( count( $images ) > 0 ) : ?>
					<?php
					$i = 0; foreach ( $images as $img_id ) :
						if ( ! $img_id ) {
							continue;
						}

						++$i;
						$attachment = get_post( $img_id );
						$title      = '';

						if ( ! empty( $attachment ) ) {
							$title = trim( strip_tags( $attachment->post_title ) ); // phpcs:ignore.
						}

						$image_data = wp_get_attachment_image_src( $img_id, 'full' );

						$link   = is_array( $image_data ) ? $image_data[0] : '';
						$width  = isset( $image_data[1] ) ? $image_data[1] : '';
						$height = isset( $image_data[2] ) ? $image_data[2] : '';

						if ( 'links' === $on_click ) {
							$link = is_array( $custom_links ) && isset( $custom_links[ $i - 1 ] ) ? $custom_links[ $i - 1 ] : '';
						}
						?>
						<div class="wd-gallery-item<?php echo esc_attr( $gallery_item_classes ); ?>">
							<?php if ( 'none' !== $on_click ) : ?>
							<a href="<?php echo esc_url( $link ); ?>" data-elementor-open-lightbox="no" data-index="<?php echo esc_attr( $i ); ?>" data-width="<?php echo esc_attr( $width ); ?>" data-height="<?php echo esc_attr( $height ); ?>" 
												<?php
												if ( $target_blank ) :
													?>
								target="_blank"<?php endif; ?>
								<?php
								if ( $caption ) :
									?>
								title="<?php echo esc_attr( $title ); ?>"<?php endif; ?>>
								<?php endif ?>

								<?php echo woodmart_otf_get_image_html( $img_id, $img_size, array(), array( 'class' => 'wd-gallery-image image-' . $i ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

								<?php if ( 'none' !== $on_click ) : ?>
							</a>
						<?php endif ?>
						</div>
					<?php endforeach ?>
				<?php endif ?>

				<?php if ( 'carousel' === $view ) : ?>
					</div>
				<?php endif; ?>
			</div>

			<?php if ( 'carousel' === $view ) : ?>
				<?php if ( 'yes' !== $parsed_atts['hide_prev_next_buttons'] ) : ?>
					<?php woodmart_get_carousel_nav_template( $nav_classes ); ?>
				<?php endif; ?>

				</div>

				<?php woodmart_get_carousel_pagination_template( $parsed_atts ); ?>
				<?php woodmart_get_carousel_scrollbar_template( $parsed_atts ); ?>
			<?php endif; ?>
		</div>
		<?php
		$output = ob_get_contents();
		ob_end_clean();

		if ( 'yes' === $lazy_loading ) {
			woodmart_lazy_loading_deinit();
		}

		return $output;
	}
}
