function togglePromoCode() {
	let promoCodeInputContainer = $("#promo-code-input-container");
	let promoCodeLabel = $("#promo-code-label");
	let applyPromoCodeButton = $("#promo-code-check");
	promoCodeLabel.toggleClass("hidden");
	promoCodeInputContainer.toggleClass("hidden");
	applyPromoCodeButton.toggleClass("hidden");
	promoCodeInputContainer.focus();

	$("#promo-code-input").on('keydown', function(event) {
        if (event.key === "Enter") {
            event.preventDefault();
            checkPromoCodeSuiza();
        }
    });
}

function showPromoCodeApplied() {
	// ocultar el input de introducir el promoCode
	let promoCodeInputContainer = $("#promo-code-input-container");
	promoCodeInputContainer.addClass("hidden");
	// mostrar el div que contendra el promoCode validado
	let promoCodeAppliedContainer = $("#promo-code-applied-container");
	promoCodeAppliedContainer.removeClass("hidden");
}

function deletePromoCode() {
    // Si tiene algo se deja vacio, si se pulsa estando vacío oculta el input
    let promoCodeInput = $("#promo-code-input").val();
    if (promoCodeInput == ""){
        // ocultar el input de introducir el promoCode
        let promoCodeInputContainer = $("#promo-code-input-container");
        promoCodeInputContainer.addClass("hidden");
        // ocultar el div que contenia el promoCode validado
        let promoCodeAppliedContainer = $("#promo-code-applied-container");
        promoCodeAppliedContainer.addClass("hidden");
        // ocultar el botón para verificar el promoCode
        let applyPromoCodeButton = $("#promo-code-check");
        applyPromoCodeButton.addClass("hidden");
        // mostrar el link de abrir el formulario de promoCode
        let promoCodeLabel = $("#promo-code-label");
        promoCodeLabel.removeClass("hidden");
        // limpiar los inputs y etiquetas que contenian el promocode validado
        $("#promoCode").val("");
        $("#promo-code-applied").text("");
        $("#promo-code-input").val("");
    }else{
        $("#promo-code-input").val("");
        $('#promo-code-check').prop('disabled', true).addClass('disabled');
    }

}

function checkPromoCodeSuiza() {
	let promoCode = $("#promo-code-input").val();
	let journeyType = $("#journeyType").val();
	let ajaxParams = {};
	ajaxParams["promoCode"] = promoCode;
	ajaxParams["journeyType"] = journeyType;
	$.ajax({
		url: params["checkPromoCodeURL"],
		type: "POST",
		data: ajaxParams,
		beforeSend: function () {
			$("#spinner").removeClass("hidden");
		},
		complete: function () {
			$("#spinner").addClass("hidden");
		},
		success: function (response) {
			try {
				//FIXME : Internacionalizar un mensaje de error cuando response === null
				let data= response?JSON.parse(response):{message:""};
				if (data.valid) {
					$("#promoCode").val(promoCode);
					$("#promo-code-applied").text(promoCode);
					$("#promo-code-check").addClass("hidden");
					showPromoCodeApplied();
				}else if(data.message!=="")
					showModal(data.message);
					$("#promo-code-input").val('');
					$('#promo-code-check').prop('disabled', true).addClass('disabled');
			}catch(e){
				$("#spinner").addClass("hidden");

			} 
		},
		error: function (response) {
			$("#spinner").addClass("hidden");

		}
	});
}

function showSearchButton(searchTag = "") {
	let origin = $('#' + searchTag + 'originId option:selected').val();
	let destination = $('#' + searchTag + 'destinationId option:selected').val();
	let disabledButtonValue = origin === "" || destination === ""
	if (disabledButtonValue) {
		$('button[id^=submitButton]').attr('disabled', 'disabled');
	} else {
		$('button[id^=submitButton]').removeAttr('disabled');
	}
}

function getSelectedOption(elem) {
	return elem.options[elem.selectedIndex].value;
}

function setSelectedOption(elem, value) {
	for (let i = 0; i < elem.options.length; i++) {
		elem.options[i].selected = value === elem.options[i].value;
	}
}

function swapByOptionValue(selector1, selector2) {
	var elem1 = document.querySelector(selector1);
	var elem2 = document.querySelector(selector2);
	var selectedOption1 = getSelectedOption(elem1);
	var selectedOption2 = getSelectedOption(elem2);
	setSelectedOption(elem1, selectedOption2);
	setSelectedOption(elem2, selectedOption1);
}

function checkLimits(inputField, minusButton, plusButton) {
	if (inputField.value === inputField.min) {
		minusButton.classList.add("u-disabled-increment");
		minusButton.setAttribute('disabled', 'true')
	} else if (inputField.value === inputField.max) {
		plusButton.classList.add("u-disabled-increment");
		plusButton.setAttribute('disabled', 'true')
	} else {
		plusButton.classList.remove("u-disabled-increment");
		plusButton.removeAttribute('disabled');
		minusButton.classList.remove("u-disabled-increment");
		minusButton.removeAttribute('disabled');
	}
}

function setupPassengerCounter(containerId) {
	const container = document.getElementById(containerId);
	if (container != null) {
	    const minusButton = container.querySelector('#minus');
        const plusButton = container.querySelector('#plus');
        const inputField = container.querySelector('.passengers');

        minusButton.addEventListener('click', event => {
            event.preventDefault();
            const currentValue = Number(inputField.value) || 0;
            if (currentValue > inputField.min) {
                inputField.value = currentValue - 1;
                checkLimits(inputField, minusButton, plusButton);
            }
        });

        plusButton.addEventListener('click', event => {
            event.preventDefault();
            const currentValue = Number(inputField.value) || 0;
            if (currentValue < inputField.max) {
                inputField.value = currentValue + 1;
                checkLimits(inputField, minusButton, plusButton);
            }
        });
	}
}

let detachedDestinations = {}
let detachedOrigins = {}

function changeOriginsAndDestinations(type, tag = "") {
	const originSelector = $('#' + tag + 'originId');
	const destinationSelector = $('#' + tag + 'destinationId');
	switch (type) {
		case 'shared':
            originSelector.append(detachedOrigins)
            destinationSelector.append(detachedDestinations)

            detachedOrigins = originSelector.find("optgroup[id^=private]").detach()
            detachedDestinations = destinationSelector.find("optgroup[id^=private]").detach()
			break;
		case 'privated':
            originSelector.append(detachedOrigins)
            destinationSelector.append(detachedDestinations)

            detachedOrigins = originSelector.find("optgroup[id^=shared]").detach()
            detachedDestinations = destinationSelector.find("optgroup[id^=shared]").detach()
	}

	originSelector.prop('selectedIndex', 0);
	destinationSelector.prop('selectedIndex', 0);



	$('#origin-destination_search').toggleClass('hidden',type!=='shared' && type!=='privated')
	$('#excursions_search').toggleClass('hidden',type!=='excursions')

	$('.submitButton-mobile').toggleClass('hidden',type!=='shared' && type!=='privated')
	$('.excursion_submitButton-mobile').toggleClass('hidden',type!=='excursions')

	$('#passengers').toggleClass('hidden',type!=='shared' && type!=='privated')
	$('#excursion_passengers').toggleClass('hidden',type!=='excursions')

	deletePromoCode();
	showSearchButton();
}

function resetDates(){
	let date = new Date();
	const formatter = new Intl.DateTimeFormat(document.querySelector('html').getAttribute('lang'));
	const formattedDate = formatter.format(date);
	$('#_com_babel_alsa_suiza_AlsaSuizaJourneySearchPortlet_outwardDate').val(formattedDate);
	$('#_com_babel_alsa_suiza_AlsaSuizaJourneySearchPortlet_excursion__outwardDate').val(formattedDate);
}

function resetPassengers() {
	$('#adults').val(1)
	$('#kids').val(0)
	$('input#passengers').val(1)
}

function selectJourneyTypeTab(selectedTab, isFirstLoad = false) {
	selectedTab.classList.add('active');

	let selectedTabName = selectedTab.getAttribute('name');
	journeyTypeInput.value = selectedTabName;

	$('#journeyType').val(selectedTabName);
	changeOriginsAndDestinations(selectedTabName, selectedTabName === 'excursions' ? 'excursion_' : "");
	if (!isFirstLoad) {
		resetPassengers();
		resetDates();
	}
	deletePromoCode();
}

