/**
 * Adaptery wyglądu dla trybu adresu rozliczeniowego (opcja gksef_billing_address_mode).
 *
 * Warstwa danych (kopiowanie shipping→billing, required=false) jest po stronie PHP i
 * działa wszędzie. Ten skrypt tylko CHOWA UI osobnego adresu rozliczeniowego, per checkout:
 *   - Sellkit: ustawia tryb „taki sam" (radio billing-method=same) + chowa sekcję billing,
 *   - classic: chowa pola osobnego adresu dostawy (billing jest adresem głównym/fakturą),
 *   - generyczny: chowa selektory z filtra ksef_billing_hide_selectors.
 *
 * Tryby: 'disabled' (wymuś jeden adres + ukryj), 'default_same' (ustaw „taki sam" raz,
 * ale zostaw przełącznik). Idempotentne, ponawiane po updated_checkout i przy mutacjach DOM.
 */
(function () {
	'use strict';

	var CFG = window.KSEF_BILLING_MODE || {};
	var MODE = CFG.mode || 'default';
	if (MODE === 'default') {
		return;
	}
	var HIDE = (MODE === 'disabled');           // chowaj sekcję
	var FORCE_SAME = true;                       // ustaw „taki sam"
	var sameForcedOnce = false;                  // dla default_same: tylko raz

	function hideEl(el) {
		if (el) { el.style.setProperty('display', 'none', 'important'); }
	}

	// --- Sellkit ---
	function sellkitSameRadio() {
		return document.querySelector(
			'input.sellkit-billing-method-a, .sellkit-billing-method-a input[type="radio"], input[name="billing-method"][value="same"]'
		);
	}
	function applySellkit() {
		var sameRadio = sellkitSameRadio();
		var section = document.querySelector('.sellkit-one-page-checkout-billing');
		var present = !!(sameRadio || section || document.querySelector('input[name="billing-method"]'));
		if (!present) { return false; }

		if (FORCE_SAME && sameRadio && !sameRadio.checked) {
			// Dla default_same wymuszamy tylko raz — nie nadpisujemy świadomego wyboru użytkownika.
			if (HIDE || !sameForcedOnce) {
				sameRadio.checked = true;
				try { sameRadio.dispatchEvent(new Event('change', { bubbles: true })); } catch (e) {}
				if (window.jQuery) { try { window.jQuery(sameRadio).trigger('change'); } catch (e) {} }
				sameForcedOnce = true;
			}
		}
		if (HIDE && section) { hideEl(section); }
		return true;
	}

	// --- WooCommerce classic ---
	// Billing jest adresem GŁÓWNYM (= adres faktury). „Jeden adres" = ukryj osobny adres dostawy.
	function applyClassic() {
		if (!HIDE) { return; }
		var ship = document.querySelector('.woocommerce-shipping-fields');
		if (ship) { hideEl(ship); }
	}

	// --- Generyczny fallback (CartFlows/FunnelKit/CheckoutWC itd.) ---
	function applyGeneric() {
		if (!HIDE) { return; }
		var sels = CFG.hide_selectors || [];
		for (var i = 0; i < sels.length; i++) {
			try {
				document.querySelectorAll(sels[i]).forEach(hideEl);
			} catch (e) {}
		}
	}

	function apply() {
		// Adaptery rozłączne: na Sellkicie chowamy TYLKO sekcję billing (Sellkit), nie ruszamy
		// pól dostawy. Dopiero gdy to NIE Sellkit — model klasyczny (chowamy osobny adres dostawy).
		var isSellkit = !!document.querySelector('.sellkit-one-page-checkout-billing, input[name="billing-method"]');
		if (isSellkit) {
			applySellkit();
		} else {
			applyClassic();
		}
		applyGeneric();
	}

	function ready(fn) {
		if (document.readyState !== 'loading') { fn(); }
		else { document.addEventListener('DOMContentLoaded', fn); }
	}

	ready(function () {
		apply();
		// Sellkit/blocks/Woo przerenderowują checkout AJAX-em.
		if (window.jQuery) {
			window.jQuery(document.body).on('updated_checkout wc_fragments_refreshed', apply);
		}
		document.addEventListener('updated_checkout', apply);
		// Ustawienia stylu (display) nie ruszają childList, więc obserwator nie zapętla się.
		// Obserwuj TYLKO kontener checkoutu (nie całe body) — na body w edytorze/podglądzie
		// Elementora obserwator reagowałby na mutacje DOM edytora.
		var ksefDebApply = (function(){ var t; return function(){ clearTimeout(t); t = setTimeout(apply, 150); }; })();
		var ksefBmRoot = function(){ return document.querySelector('form.checkout, form.woocommerce-checkout, .woocommerce-checkout, .wc-block-checkout, #sellkit-checkout, .sellkit-checkout, .sellkit-one-page-checkout-billing, .wcf-embed-checkout-form, .cartflows-checkout-form'); };
		var ksefBmAttach = function(){ var r = ksefBmRoot(); if (!r) { return false; } try { new MutationObserver(ksefDebApply).observe(r, { childList: true, subtree: true }); } catch (e) {} return true; };
		if (!ksefBmAttach()) {
			try {
				var bodyObs = new MutationObserver(function () { if (ksefBmAttach()) { try { bodyObs.disconnect(); } catch (e) {} ksefDebApply(); } });
				bodyObs.observe(document.body, { childList: true, subtree: true });
				setTimeout(function () { try { bodyObs.disconnect(); } catch (e) {} }, 10000);
			} catch (e) {}
		}
	});
})();
