Source: borrarInscripciones.js

/**
 * Módulo para manejar la cadena de confirmaciones de borrado con modales, loader y manejo de errores.
 *
 * @module borrarInscripciones
 * @author Mauricio Peña
 */

import { ModalConfirmacion } from "/InscripcionesEVG/assets/js/utils/modalConfirmacion.js";
import { Loader } from "/InscripcionesEVG/assets/js/utils/loader.js";
import { ErrorDialog } from "/InscripcionesEVG/assets/js/utils/errorHandler.js";

document.addEventListener("DOMContentLoaded", () => {
	/**
	 * Botón que inicia el proceso de borrado.
	 * @type {HTMLButtonElement | null}
	 */
	const btnBorrar = document.querySelector(".btn-borrar");

	/** Instancia para mostrar diálogos de error o confirmación */
	const errorDialog = new ErrorDialog();

	/**
	 * Manejador para el clic en el botón de borrar.
	 * Muestra un modal solicitando la contraseña para confirmar el borrado.
	 */
	btnBorrar.addEventListener("click", () => {
		new ModalConfirmacion({
			titulo: "Confirmar borrado",
			contenidoPersonalizado: `
        <label for="password-input">Introduce la contraseña para confirmar:</label>
        <input type="password" id="password-input" style="width: 50%; padding: 0.5rem; margin-top: 0.5rem;" />
      `,
			/**
			 * Función llamada al aceptar el primer modal.
			 * Valida la contraseña y decide si cerrar el modal o mostrar error.
			 * @returns {boolean} true para cerrar modal, false para mantenerlo abierto.
			 */
			onAceptar: () => {
				const input = document.getElementById("password-input");
				const password = input.value.trim();

				if (password === "") {
					alert("La contraseña no puede estar vacía.");
					return false;
				}

				if (password !== "eliminarTodo") {
					alert("Contraseña incorrecta.");
					return false;
				}

				mostrarSegundoModal();
				return true;
			},
			/** Función llamada al cancelar el primer modal */
			onCancelar: () => {
				console.log("Borrado cancelado");
			},
		});
	});

	/**
	 * Muestra el segundo modal de confirmación con mensaje simple.
	 */
	function mostrarSegundoModal() {
		new ModalConfirmacion({
			titulo: "Confirmar borrado",
			mensaje: "¿Estás seguro?",
			/**
			 * Función llamada al aceptar el segundo modal.
			 * Muestra el tercer modal.
			 * @returns {boolean} true para cerrar modal.
			 */
			onAceptar: () => {
				mostrarTercerModal();
				return true;
			},
			onCancelar: () => {
				console.log("Borrado cancelado en segundo modal");
			},
		});
	}

	/**
	 * Muestra el tercer modal de confirmación final.
	 * Al aceptar, ejecuta el borrado con petición fetch, muestra loader y mensajes.
	 */
	function mostrarTercerModal() {
		new ModalConfirmacion({
			titulo: "Confirmación final",
			mensaje: "¿Estás realmente seguro?",
			/**
			 * Función async llamada al aceptar el tercer modal.
			 * Ejecuta el borrado, muestra loader, y maneja resultados.
			 * @returns {Promise<boolean>} true para cerrar modal.
			 */
			onAceptar: async () => {
				const loader = new Loader("Borrando...");
				try {
					const response = await fetch(
						"/InscripcionesEVG/index.php?controlador=borrarInscripciones&accion=borrarTodas",
					);
					const data = await response.json();

					if (data.success) {
						errorDialog.show("Inscripciones borradas", true);
					} else {
						errorDialog.show(data.mensaje);
					}
				} catch (error) {
					errorDialog.show(error);
					console.error(error);
				} finally {
					loader.ocultar();
				}

				return true;
			},
			onCancelar: () => {
				console.log("Borrado cancelado en tercer modal");
			},
		});
	}
});