Source: models/m_crudPruebasTO.js

/**
 * @fileoverview Modelo para realizar operaciones CRUD
 * sobre las pruebas del Torneo Olímpico mediante
 * peticiones fetch a controladores PHP en el servidor.
 *
 * @author Mauricio Peña
 */

import { ErrorDialog } from "/InscripcionesEVG/assets/js/utils/errorHandler.js";

const errorDialog = new ErrorDialog();

/**
 * Clase para manejar la inserción, borrado y modificación
 * de pruebas en el sistema del Torneo Olímpico.
 */
class M_crudPruebasTO {
	/**
	 * Inserta una nueva prueba en el sistema.
	 *
	 * @async
	 * @param {string} datos - Cuerpo de la solicitud en formato JSON.
	 * @returns {Promise<Object|undefined>} Respuesta del servidor si es exitosa.
	 * @throws {Error} En caso de error en la petición o procesamiento.
	 */
	async insertPrueba(datos) {
		try {
			const response = await fetch(
				"/InscripcionesEVG/index.php?controlador=insertPruebasTO&accion=insertarInscripcion&j=1",
				{
					method: "POST",
					headers: {
						"Content-Type": "application/json",
					},
					body: datos,
				},
			);

			const data = await response.json();
			console.log(data.error);

			if (data.error) {
				errorDialog.show(data.error);
			} else {
				errorDialog.show(data.success, true);
				return data;
			}
		} catch (error) {
			console.error("Error al añadir prueba:", error);
			throw error;
		}
	}

	/**
	 * Elimina una prueba del sistema.
	 *
	 * @async
	 * @param {string} datos - Cuerpo de la solicitud en formato JSON.
	 * @returns {Promise<Object|undefined>} Respuesta del servidor si es exitosa.
	 * @throws {Error} En caso de error en la petición o procesamiento.
	 */
	async borrarPrueba(datos) {
		try {
			const response = await fetch(
				"/InscripcionesEVG/index.php?controlador=borrarPruebasTO&accion=deleteInscripcion&j=1",
				{
					method: "POST",
					headers: {
						"Content-Type": "application/json",
					},
					body: datos,
				},
			);

			const data = await response.json();
			if (data.error) {
				errorDialog.show(data.error);
			} else {
				errorDialog.show(data.success, true);
				return data;
			}
		} catch (error) {
			console.error("Error al borrar prueba:", error);
			throw error;
		}
	}

	/**
	 * Modifica una prueba existente en el sistema.
	 *
	 * @async
	 * @param {string} datos - Cuerpo de la solicitud en formato JSON.
	 * @returns {Promise<Object|undefined>} Respuesta del servidor si es exitosa.
	 * @throws {Error} En caso de error en la petición o procesamiento.
	 */
	async modificarPrueba(datos) {
		try {
			const response = await fetch(
				"/InscripcionesEVG/index.php?controlador=modificarPruebasTO&accion=modificarPrueba&j=1",
				{
					method: "POST",
					headers: {
						"Content-Type": "application/json",
					},
					body: datos,
				},
			);

			const data = await response.json();

			if (data.error) {
				errorDialog.show(data.error);
			} else {
				errorDialog.show(data.success, true);
				return data;
			}
		} catch (error) {
			console.error("Error al modificar prueba:", error);
			throw error;
		}
	}
}

export default M_crudPruebasTO;