(function (window, $, swal) {
	'use strict';

	window.FilterApp = function ($wrapper) {
		this.$wrapper = $wrapper;

		this.$wrapper.on(
			'click',
			'.js-kategoriefilter',
			this.handleFilterUpdate.bind(this)
		);

        this.$wrapper.on(
            'click',
            '.js-produkte-verfuegbarkeiten',
            this.handleZeigeVerfuegbarkeiten.bind(this)
        );

        this.$wrapper.on(
			'change',
			'.js-kategoriesort',
			this.handleChangeSortierung.bind(this)
		);

		this.$wrapper.on(
			'click',
			'.js-toggle-filter-container',
			this.handleToggleFilterEinblenden.bind(this)
		);
	};


	$.extend(window.FilterApp.prototype, {
		handleToggleFilterEinblenden: function(e) {
			e.preventDefault();
			let visible = $(e.currentTarget).data('visible');
			if (visible==1) {
				$(e.currentTarget).data('visible',0).find('i').removeClass('fa-arrow-up').addClass('fa-arrow-down');
				$(e.currentTarget).find('span').text('Filter + Sortierung einblenden');
			} else {
				$(e.currentTarget).data('visible',1).find('i').addClass('fa-arrow-up').removeClass('fa-arrow-down');
				$(e.currentTarget).find('span').text('Filter + Sortierung ausblenden');
			}
			$('#filter-container').toggleClass('d-none');
			$('#sortierung-container').toggleClass('d-none');
		},

		handleChangeSortierung: function(e) {
			e.preventDefault();
			let art = $(e.currentTarget).val();
			$(e.currentTarget).blur();

			if (art == 'preis-asc') {
                tinysort('div#product-list>div',{selector:'.preiscontainer',data:'price',order:'asc'});
            }

			if (art == 'preis-desc') {
				tinysort('div#product-list>div',{selector:'.preiscontainer',data:'price',order:'desc'});
			}

			if (art == 'standard') {
				tinysort('div#product-list>div',{selector:'.preiscontainer',data:'prio',order:'asc'});
			}

			if (art == 'beliebteste') {
				tinysort('div#product-list>div',{selector:'.variantendaten',data:'popularity',order:'desc'});
			}

			if (art == 'neueste') {
				tinysort('div#product-list>div',{selector:'.variantendaten',data:'created',order:'asc'});
			}

		},

		handleZeigeVerfuegbarkeiten: function(e) {
            e.preventDefault();
            let button = $(e.currentTarget);
            button.blur();
            if (button.data('aktiv') == 1) {
                button.text('Verfügbarkeiten einblenden').data('aktiv',0).removeClass('btn-outline-info').addClass('btn-outline-secondary');
                $('.info-artikel-verfuegbarkeiten').addClass('d-none');
                $('.varianteninfo').addClass('d-none').data('aktiv',0);
            } else {
                button.text('Verfügbarkeiten ausblenden').data('aktiv',1).addClass('btn-outline-info').removeClass('btn-outline-secondary');
                $('.info-artikel-verfuegbarkeiten').removeClass('d-none');
				$('.varianteninfo').removeClass('d-none').data('aktiv',1);
            }
        },

		handleFilterUpdate: function(e) {
			e.preventDefault();
			let button = $(e.currentTarget);
			button.blur();
			let produkte = $('.sort-produkt');
			produkte.removeClass('d-none');

			if (button.data('filterreset') == 1) {
				produkte.removeClass('d-none');
				$('.js-kategoriefilter').data('filteraktiv',0).attr('data-filteraktiv',0).removeClass('btn-info').addClass('btn-outline-secondary');
				$('#js-filter-loeschen').addClass('btn-info').removeClass('btn-outline-secondary');

				$('.js-kategoriefilter').removeClass('border-info').addClass('btn-outline-secondary').find('.fa-x').remove();
				button.addClass('btn-outline-secondary').removeClass('btn-info');
			} else {
				if (button.data('filteraktiv') == 1) {
					button.data('filteraktiv',0).attr('data-filteraktiv' , 0);
					button.removeClass('border-info').addClass('btn-outline-secondary');
					button.find('.fa-x').remove();
				} else {
					button.data('filteraktiv',1).attr('data-filteraktiv' , 1);
					button.addClass('border-info').removeClass('btn-outline-secondary');
					button.append('<i class="ml-2 text-info fa-solid fa-x"></i>');

				}

				let aktiveFilter = $('.js-kategoriefilter[data-filteraktiv="1"]').length;

				if (aktiveFilter > 0 ) {
					$('#js-filter-loeschen').removeClass('btn-outline-secondary').addClass('btn-info');
				} else {
					$('#js-filter-loeschen').addClass('btn-outline-secondary').removeClass('btn-info');
				}

				let filterbegriff_gruppe_1 = {};
				for (let i = 1; i <= 5; i++) {
					if ($('#js-filter-' + i).data('filteraktiv') == 1) {
						filterbegriff_gruppe_1[i] = $('#js-filter-' + i).data('filterbegriff');
					}
				}

				let filterbegriff_gruppe_2 = {};
				for (let i = 6; i <= 9; i++) {
					if ($('#js-filter-' + i).data('filteraktiv') == 1) {
						filterbegriff_gruppe_2[i] = $('#js-filter-' + i).data('filterbegriff');
					}
				}

				let filterbegriff_gruppe_3 = {};
				for (let i = 10; i <= 11; i++) {
					if ($('#js-filter-' + i).data('filteraktiv') == 1) {
						filterbegriff_gruppe_3[i] = $('#js-filter-' + i).data('filterbegriff');
					}
				}

				let filterbegriff_gruppe_4 = {};
				for (let i = 12; i <= 13; i++) {
					if ($('#js-filter-' + i).data('filteraktiv') == 1) {
						filterbegriff_gruppe_4[i] = $('#js-filter-' + i).data('filterbegriff');
					}
				}

				let filterbegriff_gruppe_5 = {};
				for (let i = 14; i <= 15; i++) {
					if ($('#js-filter-' + i).data('filteraktiv') == 1) {
						filterbegriff_gruppe_5[i] = $('#js-filter-' + i).data('filterbegriff');
					}
				}

				let anzahlFilterbegriffe1 = Object.keys(filterbegriff_gruppe_1).length;
				let anzahlFilterbegriffe2 = Object.keys(filterbegriff_gruppe_2).length;
				let anzahlFilterbegriffe3 = Object.keys(filterbegriff_gruppe_3).length;
				let anzahlFilterbegriffe4 = Object.keys(filterbegriff_gruppe_4).length;
				let anzahlFilterbegriffe5 = Object.keys(filterbegriff_gruppe_5).length;

				if (anzahlFilterbegriffe1>0) {

					$.each(produkte, function () {

						let produktFilter = $(this).find('.variantendaten').data('filterbegriffe');
						let treffer=0;

						$.each(filterbegriff_gruppe_1, function (key,value) {

							if (produktFilter.includes(value)) {
								treffer++;
							}
						});

						if (treffer > 0) {
							$(this).removeClass('d-none');
						} else {
							$(this).addClass('d-none');
						}


					});
				}

				let produkte2 = $('.sort-produkt:not(.d-none)');

				if (anzahlFilterbegriffe2>0) {

					$.each(produkte2, function () {

						let produktFilter = $(this).find('.variantendaten').data('filterbegriffe');
						let treffer=0;

						$.each(filterbegriff_gruppe_2, function (key,value) {

							if (produktFilter.includes(value)) {
								treffer++;
							}
						});

						if (treffer > 0) {
							$(this).removeClass('d-none');
						} else {
							$(this).addClass('d-none');
						}

					});
				}

				let produkte3 = $('.sort-produkt:not(.d-none)');

				if (anzahlFilterbegriffe3>0) {

					$.each(produkte3, function () {

						let produktFilter = $(this).find('.variantendaten').data('filterbegriffe');
						let treffer=0;

						$.each(filterbegriff_gruppe_3, function (key,value) {

							if (produktFilter.includes(value)) {
								treffer++;
							}
						});

						if (treffer > 0) {
							$(this).removeClass('d-none');
						} else {
							$(this).addClass('d-none');
						}

					});
				}

				let produkte4 = $('.sort-produkt:not(.d-none)');

				if (anzahlFilterbegriffe4>0) {

					$.each(produkte4, function () {

						let produktFilter = $(this).find('.variantendaten').data('filterbegriffe');
						let treffer=0;

						$.each(filterbegriff_gruppe_4, function (key,value) {

							if (produktFilter.includes(value)) {
								treffer++;
							}
						});

						if (treffer > 0) {
							$(this).removeClass('d-none');
						} else {
							$(this).addClass('d-none');
						}

					});
				}

				let produkte5 = $('.sort-produkt:not(.d-none)');

				if (anzahlFilterbegriffe5>0) {

					$.each(produkte4, function () {

						let produktFilter = $(this).find('.variantendaten').data('filterbegriffe');
						let treffer=0;

						$.each(filterbegriff_gruppe_5, function (key,value) {

							if (produktFilter.includes(value)) {
								treffer++;
							}
						});

						if (treffer > 0) {
							$(this).removeClass('d-none');
						} else {
							$(this).addClass('d-none');
						}

					});
				}

				if (anzahlFilterbegriffe1 == 0 && anzahlFilterbegriffe2 == 0 && anzahlFilterbegriffe3 == 0 && anzahlFilterbegriffe4 == 0 && anzahlFilterbegriffe5 == 0) {
					produkte.removeClass('d-none');
				}
			}
		},

	});




})(window, jQuery, swal);

$(document).ready(function () {
	var $wrapper = $('body');
	var filterApp = new FilterApp($wrapper);
});

