function validationDa(confirm) {
	let form = document.getElementById("form_creationDA");
	let formData = new FormData(form);
	if (confirm) {
		formData.append("confirm", "1");
	}
	activeLoader();
	$.ajax({
		url: form.action,
		type: "POST",
		dataType: "html",
		data: formData,
		contentType: false,
		processData: false,
		success: function (htmlData) {
			$("#modal-content").addClass("modal_small");
			$("#modal-body").html(htmlData);
			activePopup();
			desactiveLoader();
		},
		error: function (xhr) {
			let response = JSON.parse(xhr.responseText);
			if (response.type == "confirm") {
				desactiveLoader();
				activePopup(
					"Erreur validation", // TODO : translate
					response.popupHtml,
					"modal_small"
				);
				document
					.querySelector("[data-popupwarning-cancel]")
					.addEventListener("click", function () {
						desactivePopup();
					});
				document
					.querySelector("[data-popupwarning-continue]")
					.addEventListener("click", function () {
						// Resend form with confirm
						validationDa(true);
						desactivePopup();
					});
				return;
			}

			window.location.href = response.path;
		},
	});
}

function modificationLigne(index, path, pathValidation) {
	var affichageNewligne = false;
	var modeModifActif = $("#idLigneModeModif").val();
	if (modeModifActif) {
		affichageNewligne = validationLigne(pathValidation, modeModifActif);
	} else {
		affichageNewligne = true;
	}

	if (affichageNewligne) {
		activeLoader();

		$.ajax({
			dataType: "html",
			url: path,
			data: { index: index },
			type: "POST",
			success: function (result) {
				$("#LIGNE" + index + "NON_MODIF").before(result);
				$("#LIGNE" + index + "NON_MODIF").remove();
				desactiveLoader();
			},
		});
	}
}

function deleteLigne(path, idLigne, messageDeleteLigne, pathDeleteTP) {
	var confirmation = confirm(messageDeleteLigne);
	let form = document.getElementById("form_creationDA");
	let formData = new FormData(form);
	formData.append("index", idLigne);
	if (confirmation) {
		activeLoader();
		$.ajax({
			dataType: "json",
			data: formData,
			url: path,
			type: "POST",
			contentType: false,
			processData: false,
			success: function (data) {
				$("#montant_ht").html(data.HT);
				$("#montant_ttc").html(data.TTC);
				$("#LIGNE" + idLigne + "NON_MODIF").remove();
				if (verificationNombreTotalFourniss() != 1) {
					$("#onglet_termPaiement").hide();
				} else {
					$("#onglet_termPaiement").show();
				}
				$.ajax({
					url: pathDeleteTP,
					method: "POST",
				});
				desactiveLoader();
			},
		});
	}
}

function showDatepicker(id, calendarJPG, paramDateFormat) {
	$(id).datepicker({
		showOn: "button",
		changeYear: true,
		changeMonth: true,
		buttonImage: calendarJPG,
		buttonImageOnly: true,
		showAnim: "fade",
		dateFormat: paramDateFormat,
	});
}

function reload_js(src) {
	$('script[src="' + src + '"]').remove();
	$("<script>").attr("src", src).appendTo("head");
}

function changeLangue(path, pathValidation) {
	activeLoader();
	param = {
		COD_LNG: $("#input_COD_LNG").val(),
		idDA: $("#idDA").val(),
		mode: $("#mode").val(),
		MODULE: $("#MODULE").val(),
	};

	var modeModifActif = $("#idLigneModeModif").val();
	if (modeModifActif) {
		validationLigne(pathValidation, modeModifActif, "changeLangue", path);
	} else {
		$.ajax({
			dataType: "html",
			data: param,
			url: path,
			type: "POST",
			success: function (result) {
				refreshFonction("Article", result);
				desactiveLoader();
			},
			error: function (data) {
				desactiveLoader();
				$("#modal-content").addClass("modal_small");
				$("#modal-body").html(data.responseText);
				activePopup();
			},
		});
	}
}

function popupQuestionDevise(path, pathPopup) {
	return "";
	if ($("#input_DEVISE").val() != "") {
		$.ajax({
			dataType: "html",
			url: pathPopup,
			data: { path: path, devise: $("#input_DEVISE").val() },
			type: "POST",
			success: function (result) {
				$("#modal-content").addClass("modal_small");
				$("#modal-title").html("");
				$("#modal-body").html(result);
				activePopup();
			},
		});
	}
}

function calculPUNewDevise(path) {
	desactivePopup();

	param = {
		DEVISE: $("#input_DEVISE").val(),
		OLD_DEVISE: $("#OLD_DEVISE").val(),
		lignes: {},
	};
	i = 0;
	index = 0;
	tabIdLigne = [];

	$('[id^="LIGNE"]:even').each(function () {
		id = $(this).attr("id");
		idLigne = id.replace("LIGNE", "");
		tabIdLigne[i++] = idLigne;
	});

	for (i = 0; i < tabIdLigne.length; i++) {
		idLigne = tabIdLigne[i];
		pu = $("#input_ligne_PU" + idLigne)
			.val()
			.replace(",", ".")
			.replace(new RegExp(" ", "g"), "");
		if (pu != "" && parseFloat(pu) != 0) {
			param["lignes"][index] = { idLigne: idLigne, PU: pu };
			index++;
		}
	}

	$.ajax({
		dataType: "JSON",
		data: param,
		url: path,
		type: "POST",
		// success: function (data) {
		// 	if (data.Statut) {
		// 		for (i = 0; i < data["Lignes"].length; i++) {
		// 			$("#input_ligne_PU" + data["Lignes"][i]["idLigne"]).val(
		// 				parseFloat(data["Lignes"][i]["PU"]).toFixed(5)
		// 			);
		// 		}
		// 		$("#OLD_DEVISE").val($("#input_DEVISE").val());
		// 		$(".deviseMontant").text($("#input_DEVISE").val());
		// 	}
		// 	desactiveLoader();
		// },
	});
}

function ajoutLigne(path, pathValidation) {
	if ($(".idLigneCde").length > 998) {
		alert(
			"Vous ne pouvez pas créer plus de 999 lignes par demande d'achat."
		);
		return false;
	}

	var modeModifActif = $("#idLigneModeModif").val();
	if (modeModifActif) {
		validationLigne(pathValidation, modeModifActif, "ajoutLigne", path);
	} else {
		activeLoader();
		var index = $(".idLigneCde").last().attr("data-idLigne");

		if (index === undefined) index = 0;

		$.ajax({
			dataType: "html",
			url: path,
			data: { index: index },
			type: "POST",
			success: function (result) {
				var parametreJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/parametre.js"/>';
				var globalJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/global.js"/>';
				var validator =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/validator.js"/>';

				$("table#ligneCde tbody tr:last-child").before(
					result +
						'<tr id="LIGNE' +
						(parseInt(index) + 1) +
						'JS">' +
						parametreJS +
						globalJS +
						validator +
						"</tr>"
				);

				desactiveLoader();
				$("html,body").animate(
					{
						scrollTop: $(
							"#LIGNE" + (parseInt(index) + 1) + ""
						).offset().top,
					},
					"slow"
				);
			},
		});
	}
}

function validationLigne(path, idLigne, confirm = false, pathDeleteTP) {
	let form = document.getElementById("form_creationDA");
	let formData = new FormData(form);
	if (confirm) {
		formData.append("confirm", "1");
	}

	activeLoader();

	$.ajax({
		url: path,
		type: "POST",
		dataType: "json",
		data: formData,
		contentType: false,
		processData: false,
		success: function (data) {
			$("#montant_ht").html(data.da["HT"]);
			$("#montant_ttc").html(data.da["TTC"]);
			$("#items").html(data.html);
			$.ajax({
				url: pathDeleteTP,
				method: "POST",
			});
			if (verificationNombreTotalFourniss() != 1) {
				$("#onglet_termPaiement").hide();
			} else {
				$("#onglet_termPaiement").show();
			}
			desactiveLoader();
		},
		error: function (xhr) {
			let response = JSON.parse(xhr.responseText);
			if (response.type == "confirm") {
				desactiveLoader();
				activePopup(
					window.oxaproc.trad["Erreur validation"],
					response.popupHtml,
					"modal_small"
				);
				document
					.querySelector("[data-popupwarning-cancel]")
					.addEventListener("click", function () {
						desactivePopup();
					});
				document
					.querySelector("[data-popupwarning-continue]")
					.addEventListener("click", function () {
						// Resend form with confirm
						validationLigne(path, idLigne, true);
						desactivePopup();
					});
				return;
			} else {
				desactiveLoader();
				activePopup(
					response.titre, // TODO : translate
					response.popupHtml,
					"modal_small"
				);
				document
					.querySelector("#btn_close")
					.addEventListener("click", function () {
						desactivePopup();
					});
			}

			// window.location.href = response.path;
		},
		// success: function (data) {
		// 	$("#LIGNE" + idLigne + "JS").after(data);
		// 	$("#LIGNE" + idLigne + "").remove();
		// 	$("#LIGNE" + idLigne + "detail").remove();
		// 	$("#LIGNE" + idLigne + "JS").remove();
		// 	desactiveLoader();

		// 	$("#nb_affectation_ligne").html($(".idLigneCde").length);

		// 	refrechDiv(window.location.pathname, "montantCde", "");
		// },
		// error: function (xhr) {
		// 	desactiveLoader();
		// 	activePopup(null, xhr.responseText, "modal_small");
		// },
	});
}

function changeEmail(objet, icone) {
	if ($(objet).val() == "") {
		$("#" + icone).hide();
	} else {
		$("#" + icone).show();
	}
}

function readonlyRecepAuto() {
	$("#input_ligne_DTELIVSOU").removeAttr("readOnly");
	showDatepicker(
		"#input_ligne_DTELIVSOU",
		baseUrl + "IconeV2/Global/deadline-change.svg",
		$("#DateFormat").val()
	);

	$("#ligne_recep .obligatoire").hide();

	$("#input_ligne_DATEDEBCONT").attr("readOnly", true);
	$("#input_ligne_DATEDEBCONT").datepicker("destroy");

	$("#input_ligne_DATEFINCONT").attr("readOnly", true);
	$("#input_ligne_DATEFINCONT").datepicker("destroy");

	$("#input_ligne_CONTRAT_PERIOD").attr("readOnly", true);
	$("#input_ligne_CONTRAT_PERIOD option").attr("disabled", true);

	$("#input_ligne_FIN_DEB_PER").attr("readOnly", true);
	$("#input_ligne_FIN_DEB_PER option").attr("disabled", true);

	$("#input_ligne_DALI_RECEPAUTO_JOUR").attr("readOnly", true);
	$("#input_ligne_DALI_RECEPAUTO_JOUR option").attr("disabled", true);
}

function initRecepAuto() {
	$("#input_ligne_DTELIVSOU").attr("readOnly", true);
	$("#input_ligne_DTELIVSOU").datepicker("destroy");

	$("#ligne_recep .obligatoire").show();

	$("#input_ligne_DATEDEBCONT").val("");
	$("#input_ligne_DATEDEBCONT").removeAttr("readOnly");
	showDatepicker(
		"#input_ligne_DATEDEBCONT",
		baseUrl + "IconeV2/Global/deadline-change.svg",
		$("#DateFormat").val()
	);

	$("#input_ligne_DATEFINCONT").val("");
	$("#input_ligne_DATEFINCONT").removeAttr("readOnly");
	showDatepicker(
		"#input_ligne_DATEFINCONT",
		baseUrl + "IconeV2/Global/deadline-change.svg",
		$("#DateFormat").val()
	);

	if ($("#ligne_ART_PER_REC_AUTO").val() != "") {
		$("#input_ligne_CONTRAT_PERIOD").val(
			$("#ligne_ART_PER_REC_AUTO").val()
		);
	} else if ($("#ligne_FOU_PER_REC_AUTO").val() != "") {
		$("#input_ligne_CONTRAT_PERIOD").val(
			$("#ligne_FOU_PER_REC_AUTO").val()
		);
	} else {
		$("#input_ligne_CONTRAT_PERIOD").val("M");
	}
	$("#input_ligne_CONTRAT_PERIOD").removeAttr("readOnly");
	$("#input_ligne_CONTRAT_PERIOD option").removeAttr("disabled");

	$("#input_ligne_FIN_DEB_PER").val("F");
	$("#input_ligne_FIN_DEB_PER").removeAttr("readOnly");
	$("#input_ligne_FIN_DEB_PER option").removeAttr("disabled");

	$("#input_ligne_DALI_RECEPAUTO_JOUR").val("31");
	$("#input_ligne_DALI_RECEPAUTO_JOUR").removeAttr("readOnly");
	$("#input_ligne_DALI_RECEPAUTO_JOUR option").removeAttr("disabled");
}

function ajoutClause(path, pathValidation) {
	if ($(".idLigneClause").length > 998) {
		// TODO revoir message erreur
		alert(
			"Vous ne pouvez pas créer plus de 999 clauses par demande d'achat."
		);
		return false;
	}

	var modeModifActif = $("#idClauseModeModif").val();
	if (modeModifActif) {
		validationClause(pathValidation, modeModifActif, "ajoutClause", path);
	} else {
		activeLoader();
		var index = $(".idLigneClause").last().attr("data-idLigne");

		if (index === undefined) index = 0;

		$.ajax({
			dataType: "html",
			url: path,
			data: { index: index },
			type: "POST",
			success: function (result) {
				var parametreJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/parametre.js"/>';
				var globalJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/global.js"/>';
				var validator =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/validator.js"/>';

				$("table#ligneClause tbody tr:last-child").before(
					result +
						'<tr id="CLAUSE' +
						(parseInt(index) + 1) +
						'JS">' +
						parametreJS +
						globalJS +
						validator +
						"</tr>"
				);

				desactiveLoader();
				$("html,body").animate(
					{
						scrollTop: $(
							"#CLAUSE" + (parseInt(index) + 1) + ""
						).offset().top,
					},
					"slow"
				);
			},
		});
	}
}

function modificationClause(index, path, pathValidation) {
	var modeModifActif = $("#idClauseModeModif").val();
	if (modeModifActif) {
		validationClause(
			pathValidation,
			modeModifActif,
			"modificationClause",
			path,
			index
		);
	} else {
		activeLoader();

		$.ajax({
			dataType: "html",
			url: path,
			data: { index: index },
			type: "POST",
			success: function (result) {
				var parametreJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/parametre.js"/>';
				var globalJS =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/global.js"/>';
				var validator =
					'<script type="text/javascript" src="' +
					baseUrl +
					'js/validator.js"/>';

				$("#CLAUSE" + index + "NON_MODIF").before(
					result +
						'<tr id="CLAUSE' +
						index +
						'JS">' +
						parametreJS +
						globalJS +
						validator +
						"</tr>"
				);

				$("#CLAUSE" + index + "NON_MODIF").remove();

				$("#CLAUSE" + index + "NON_MODIF_AVLIGNE").remove();
				$("#CLAUSE" + index + "NON_MODIF_SSTOAPR").remove();

				desactiveLoader();
			},
		});
	}
}

function validationClause(
	path,
	idLigne,
	retour,
	pathRetour,
	indexNewLigne2Modif
) {
	desactivePopup();
	activeLoader();

	$.ajax({
		dataType: "html",
		url: path,
		type: "POST",
		data: $("#form_creationDA").serialize(),
		success: function (data) {
			// affichageNewligne = false;
			desactiveLoader();
			$("#modal-content").addClass("modal_small");
			$("#modal-body").html(data);
			activePopup();
		},
		error: function (data) {
			// affichageNewligne = true;
			$("#CLAUSE" + idLigne).after(data.responseText);
			$("#CLAUSE" + idLigne).remove();
			$("#CLAUSE" + idLigne + "detail").remove();
			$("#CLAUSE" + idLigne + "JS").remove();

			// if (retour == "ajoutClause") {
			// 	ajoutClause(pathRetour, path);
			// }
			// if (retour == "modificationClause") {
			// 	modificationClause(indexNewLigne2Modif, pathRetour, path);
			// }
			// if (retour == "validationDA") {
			// 	validationDA(pathRetour, "", path);
			// }

			desactiveLoader();
		},
	});
}

function suppressionClause(index, path, message) {
	var confirmation = confirm(message);

	if (confirmation) {
		$.ajax({
			dataType: "html",
			url: path,
			data: { index: index },
			type: "POST",
			success: function (result) {
				$("#CLAUSE" + index + "NON_MODIF").remove();
			},
		});
	}
}

// TODO: Voir s'il faut prévoir un appel ajax pour "nettoyer" les tables de TP si multi-fournisseur
function verificationNombreTotalFourniss() {
	let noFour = false;
	let count = 0;
	let allFrs = [];
	$("#ligneCde tbody tr").each(function () {
		const id = $(this).attr("id");
		if (id && id.endsWith("NON_MODIF")) {
			const fourniss = $(this).children("td").eq(2).text();
			// permet de récupérer le code four mis en parenthèse
			const match = fourniss.match(/\(([^)]+)\)/);

			if (match == null) {
				noFour = true;
				return;
			}
			const codeFour = match[1];
			if (!allFrs.includes(codeFour)) {
				allFrs.push(codeFour);
				count++;
			}
		}
	});
	return noFour ? 0 : allFrs.length;
}