/**
 * Multi-select "Aggiungi selezionati al carrello" — versione JS puro
 * --------------------------------------------------------------------
 * NON dipende dagli hook PHP di WooCommerce (Avada li sostituisce con
 * un template proprio). Costruisce checkbox, barra e copertina
 * leggendo direttamente il DOM già renderizzato dalla pagina.
 *
 * Percorso in cui caricare questo file:
 * wp-content/themes/avada-child/js/multi-select-add-to-cart.js
 *
 * Richiede che l'AJAX add to cart sia attivo in
 * WooCommerce > Impostazioni > Prodotti > "Abilita AJAX aggiungi
 * al carrello sulle pagine di archivio".
 */
document.addEventListener( 'DOMContentLoaded', function () {

/* Trova tutti i bottoni "Aggiungi al carrello" presenti in griglia.
// Questa classe/attributo è generata da WooCommerce stesso, quindi
// resta presente anche se il tema personalizza tutto il resto.
var addToCartButtons = document.querySelectorAll( 'a.add_to_cart_button[data-product_id]' );
*/

	if ( ! addToCartButtons.length ) {
		return; // Non siamo in una pagina con prodotti in griglia, ci fermiamo qui.
	}

	/* 1. Aggiunge una checkbox prima di ogni bottone "Aggiungi al carrello"*/
	addToCartButtons.forEach( function ( btn ) {
		var productId = btn.getAttribute( 'data-product_id' );
		var wrapper = document.createElement( 'label' );
		wrapper.className = 'msatc-checkbox-wrap';
		wrapper.innerHTML =
			'<input type="checkbox" class="msatc-product-checkbox" value="' + productId + '" /> <span>Seleziona</span>';
		btn.parentNode.insertBefore( wrapper, btn );
	} );

	/* 2. Individua il contenitore della griglia prodotti (il genitore del primo prodotto)*/
	var firstProduct = addToCartButtons[ 0 ].closest( 'li, .product, .type-product' );
	var productsContainer = firstProduct ? firstProduct.parentElement : null;
	var insertionPoint = productsContainer && productsContainer.parentNode ? productsContainer : null;

	/* 3. Crea la barra "Aggiungi selezionati al carrello"*/
	var bar = document.createElement( 'div' );
	bar.className = 'msatc-bulk-bar';
	bar.innerHTML =
		'<span class="msatc-counter">0 foto selezionate</span>' +
		'<button type="button" id="msatc-add-selected" class="button" disabled>Aggiungi selezionati al carrello</button>';

	/* 4. Crea la copertina della categoria, se disponibile (passata da PHP)*/
	if ( typeof msatc_params !== 'undefined' && msatc_params.category_cover_url ) {
		var cover = document.createElement( 'div' );
		cover.className = 'msatc-category-cover';
		cover.innerHTML = '<img src="' + msatc_params.category_cover_url + '" alt="" />';
		if ( insertionPoint ) {
			insertionPoint.parentNode.insertBefore( cover, insertionPoint );
		} else {
			document.body.insertBefore( cover, document.body.firstChild );
		}
	}

	if ( insertionPoint ) {
		insertionPoint.parentNode.insertBefore( bar, insertionPoint );
	} else {
		document.body.insertBefore( bar, document.body.firstChild );
	}

	var counterEl = bar.querySelector( '.msatc-counter' );
	var bulkButton = bar.querySelector( '#msatc-add-selected' );

	function updateCounter() {
		var count = document.querySelectorAll( '.msatc-product-checkbox:checked' ).length;
		counterEl.textContent = count + ' foto selezionate';
		bulkButton.disabled = count === 0;
	}

	document.body.addEventListener( 'change', function ( e ) {
		if ( e.target.classList.contains( 'msatc-product-checkbox' ) ) {
			updateCounter();
		}
	} );

	function getAjaxUrl( endpoint ) {
		if ( typeof wc_add_to_cart_params === 'undefined' ) {
			console.error(
				'wc_add_to_cart_params non trovato: attiva l\'AJAX add to cart in WooCommerce > Impostazioni > Prodotti.'
			);
			return null;
		}
		return wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', endpoint );
	}

	function addSingleProduct( productId ) {
		var url = getAjaxUrl( 'add_to_cart' );
		if ( ! url ) {
			return Promise.reject();
		}
		return fetch( url, {
			method: 'POST',
			headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
			body: 'product_id=' + encodeURIComponent( productId ) + '&quantity=1',
		} );
	}

	bulkButton.addEventListener( 'click', function () {
		var checked = document.querySelectorAll( '.msatc-product-checkbox:checked' );
		if ( ! checked.length ) {
			return;
		}

		var ids = Array.prototype.map.call( checked, function ( cb ) {
			return cb.value;
		} );

		var originalLabel = bulkButton.textContent;
		bulkButton.disabled = true;
		bulkButton.textContent = 'Aggiunta in corso...';

		Promise.all( ids.map( addSingleProduct ) ).finally( function () {
			if ( typeof jQuery !== 'undefined' ) {
				jQuery( document.body ).trigger( 'wc_fragment_refresh' );
			}
			checked.forEach( function ( cb ) {
				cb.checked = false;
			} );
			updateCounter();
			bulkButton.textContent = 'Aggiunti al carrello!';
			setTimeout( function () {
				bulkButton.textContent = originalLabel;
			}, 2000 );
		} );
	} );
} );