woodmartThemeModule.$document.on('wdInstagramAjaxSuccess wdLoadDropdownsSuccess wdProductsTabsLoaded wdSearchFullScreenContentLoaded wdShopPageInit wdRecentlyViewedProductLoaded wdQuickViewOpen300', function() {
	woodmartThemeModule.swiperInit();
});

[
	'frontend/element_ready/wd_products.default',
	'frontend/element_ready/wd_products_tabs.default',
	'frontend/element_ready/wd_product_categories.default',
	'frontend/element_ready/wd_products_brands.default',
	'frontend/element_ready/wd_blog.default',
	'frontend/element_ready/wd_portfolio.default',
	'frontend/element_ready/wd_images_gallery.default',
	'frontend/element_ready/wd_product_categories.default',
	'frontend/element_ready/wd_banner_carousel.default',
	'frontend/element_ready/wd_infobox_carousel.default',
	'frontend/element_ready/wd_instagram.default',
	'frontend/element_ready/wd_testimonials.default',
	'frontend/element_ready/wd_nested_carousel.default',
	'frontend/element_ready/wd_single_product_fbt_products.default'
].forEach( function (value) {
	woodmartThemeModule.wdElementorAddAction(value, function() {
		woodmartThemeModule.swiperInit();
	});
});

woodmartThemeModule.swiperInit = function() {
	if ('undefined' === typeof wdSwiper) {
		console.error('Swiper is not defined');

		return;
	}

	document.querySelectorAll('.wd-carousel:not(.scroll-init)').forEach( function (carousel) {
		carouselInit(carousel);
	});

	if ('undefined' !== typeof window.Waypoint) {
		document.querySelectorAll('.wd-carousel.scroll-init').forEach( function (carousel) {
			new Waypoint({
				element: carousel,
				handler: function() {
					if (carousel.classList.contains('wd-initialized')) {
						this.destroy();
					}

					carouselInit(this.element);
				},
				offset: '100%'
			});
		});
	}

	function carouselInit(carousel, thumbs = false) {
		if (carousel.closest('.woocommerce-product-gallery') && ! carousel.classList.contains('quick-view-gallery') || ( ! thumbs && 'undefined' !== typeof carousel.dataset.sync_child_id && document.querySelector('.wd-carousel[data-sync_parent_id=' + carousel.dataset.sync_child_id + ']') ) ) {
			return;
		}

		var carouselWrapper = carousel.closest('.wd-carousel-container');
		var carouselStyle = window.getComputedStyle(carousel);

		if (woodmartThemeModule.windowWidth <= 1024 && carouselWrapper.classList.contains('wd-carousel-dis-mb') || carousel.classList.contains('wd-initialized') ) {
			return;
		}

		var mainSlidesPerView = carouselStyle.getPropertyValue('--wd-col');
		var breakpointsSettings = woodmart_settings.carousel_breakpoints;
		var breakpoints = {};
		var carouselItemsLength = carousel.querySelectorAll('.wd-carousel-item').length;

		Object.entries(breakpointsSettings).forEach(( [size, key] ) => {
			var slidesPerView = carouselStyle.getPropertyValue('--wd-col-' + key );
			var enableScrollPerGroup = 'undefined' !== typeof carousel.dataset.scroll_per_page && 'yes' === carousel.dataset.scroll_per_page;

			if ( ! slidesPerView ) {
				slidesPerView = mainSlidesPerView;
			}

			if ( slidesPerView ) {
				breakpoints[ size ] = {
					slidesPerView : slidesPerView ? slidesPerView : 1
				};

				if ( 'yes' === carousel.dataset.wrap && parseInt(slidesPerView, 10 ) * 2 > carouselItemsLength || 'yes' === carousel.dataset.center_mode) {
					enableScrollPerGroup = false;
				}

				if ( enableScrollPerGroup && slidesPerView ) {
					breakpoints[ size ]['slidesPerGroup'] = parseInt(slidesPerView);
				}

				// if ( 'yes' === carousel.dataset.wrap && 'yes' === carousel.dataset.center_mode ) {
				// 	// breakpoints[ size ]['loopAdditionalSlides'] = parseInt(parseInt( slidesPerView, 10 ) / 2, 10 );
				// 	breakpoints[ size ]['loopAdditionalSlides'] = 1;
				// }
			}
		});

		var config = {
			slidesPerView         : mainSlidesPerView,
			loop                  : 'yes' === carousel.dataset.wrap && ('yes' !== carousel.dataset.center_mode || parseInt( mainSlidesPerView, 10) + 1 < carouselItemsLength ),
			loopAddBlankSlides    : false,
			centeredSlides        : 'yes' === carousel.dataset.center_mode,
			autoHeight            : 'yes' === carousel.dataset.autoheight,
			grabCursor            : true,
			a11y                  : {
				enabled: false
			},
			breakpoints           : breakpoints,
			watchSlidesProgress   : true,
			slideClass            : 'wd-carousel-item',
			slideActiveClass      : 'wd-active',
			slideVisibleClass     : 'wd-slide-visible',
			slideNextClass        : 'wd-slide-next',
			slidePrevClass        : 'wd-slide-prev',
			slideFullyVisibleClass: 'wd-full-visible',
			slideBlankClass       : 'wd-slide-blank',
			lazyPreloaderClass    : 'wd-lazy-preloader',
			containerModifierClass: 'wd-',
			wrapperClass          : 'wd-carousel-wrap',
			simulateTouch         : ! carousel.closest('.block-editor-block-list__layout'),
			on                    : {
				init: function() {
					setTimeout(function() {
						woodmartThemeModule.$document.trigger('wdSwiperCarouselInited');
					}, 100);
				}
			}
		};

		if ('undefined' !== typeof carousel.dataset.effect) {
			var effect = carousel.dataset.effect;

			if ('distortion' === effect) {
				effect = 'fade';
			}

			config.effect = effect;

			if ('parallax' === effect) {
				config.parallax = {
					enabled: true
				};

				carousel.querySelectorAll('.wd-slide-bg').forEach( function (slideBg) {
					slideBg.setAttribute('data-swiper-parallax', '50%');
				});
			}
		}

		if ('undefined' !== typeof carousel.dataset.sliding_speed && carousel.dataset.sliding_speed) {
			config.speed = carousel.dataset.sliding_speed;
		}

		var pagination = Array.prototype.filter.call(
			carouselWrapper.children,
			(element) => element.classList.contains('wd-nav-pagin-wrap'),
		).shift();

		if (pagination) {
			config.pagination = {
				el                     : pagination.querySelector('.wd-nav-pagin'),
				dynamicBullets         : pagination.classList.contains('wd-dynamic'),
				type                   : 'bullets',
				clickable              : true,
				bulletClass            : 'wd-nav-pagin-item',
				bulletActiveClass      : 'wd-active',
				modifierClass          : 'wd-type-',
				lockClass              : 'wd-lock',
				currentClass           : 'wd-current',
				totalClass             : 'wd-total',
				hiddenClass            : 'wd-hidden',
				clickableClass         : 'wd-clickable',
				horizontalClass        : 'wd-horizontal',
				verticalClass          : 'wd-vertical',
				paginationDisabledClass: 'wd-disabled',
				renderBullet           : function(index, className) {
					var innerContent = '';

					if (pagination.classList.contains('wd-style-number-2')) {
						innerContent = index + 1;

						if ( 9 >= innerContent ) {
							innerContent = '0' + innerContent;
						}
					}

					return '<li class="' + className + '"><span>' + innerContent + '</span></li>';
				}
			};
		}

		var navigationWrapper = Array.prototype.filter.call(
			carouselWrapper.querySelector('.wd-carousel-inner').children,
			(element) => element.classList.contains('wd-nav-arrows'),
		).shift();

		if (navigationWrapper) {
			config.navigation = {
				nextEl       : navigationWrapper.querySelector('.wd-btn-arrow.wd-next'),
				prevEl       : navigationWrapper.querySelector('.wd-btn-arrow.wd-prev'),
				disabledClass: 'wd-disabled',
				lockClass    : 'wd-lock',
				hiddenClass  : 'wd-hide'
			};
		}

		var scrollbar = Array.prototype.filter.call(
			carouselWrapper.children,
			(element) => element.classList.contains('wd-nav-scroll'),
		).shift();

		if (scrollbar) {
			config.scrollbar = {
				el                    : scrollbar,
				lockClass             : 'wd-lock',
				dragClass             : 'wd-nav-scroll-drag',
				scrollbarDisabledClass: 'wd-disabled',
				horizontalClass       : 'wd-horizontal',
				verticalClass         : 'wd-vertical',
				draggable             : true
			};

			config.on.scrollbarDragStart = function () {
				scrollbar.classList.add('wd-grabbing');
			};
			config.on.scrollbarDragEnd = function () {
				scrollbar.classList.remove('wd-grabbing');
			};
		}

		if ('undefined' !== typeof carousel.dataset.autoplay && 'yes' === carousel.dataset.autoplay) {
			config.autoplay = {
				delay: carousel.dataset.speed ? carousel.dataset.speed : 5000,
				pauseOnMouseEnter: true
			};
		}

		if ('undefined' !== typeof carousel.dataset.sync_parent_id) {
			var childCarousel = document.querySelector('.wd-carousel[data-sync_child_id=' + carousel.dataset.sync_parent_id + ']');

			if ( childCarousel ) {
				config.thumbs = {
					swiper               : carouselInit(childCarousel, true),
					slideThumbActiveClass: 'wd-thumb-active',
					thumbsContainerClass : 'wd-thumbs'
				};
			}
		}

		carousel.querySelectorAll('link').forEach(function (link) {
			var linkClone = link.cloneNode(false);

			carouselWrapper.append(linkClone);

			linkClone.addEventListener('load', function() {
				setTimeout(function () {
					link.remove();
				}, 500);
			}, false);
		});

		const swiper = new wdSwiper(carousel, config);

		if (carouselWrapper && carouselWrapper.classList.contains('wd-slider')) {
			swiper.on('realIndexChange', function (swiper) {
				setTimeout(function () {
					carousel.dispatchEvent(new CustomEvent('wdSlideChange', {
						detail: {activeIndex: swiper.realIndex}
					}));
				},100);
			});
		}

		window.addEventListener('popstate', function() {
			document.querySelectorAll('.wd-carousel.wd-initialized').forEach( function (carousel) {
				if ('undefined' === typeof carousel.swiper) {
					carousel.classList.remove('wd-initialized');

					carouselInit(carousel);
				}
			});
		});

		return swiper;
	}
};

window.addEventListener('load',function() {
	woodmartThemeModule.swiperInit();
});
