// {} Librerías e importaciones

// ! Tabla
import Tabla from "../../elementos/tabla.js";

// {}
(async () => {

  // ! Declaración de variables
  let
		peticion = {
			actual: null,
			parametro: new URLSearchParams(location.search).get('id_seguimiento')
		},
		campo = {
			id_contacto: window.aplicacion.campo.selector.id_contacto,
			id_cliente:	window.aplicacion.campo.mascara.id_cliente,
			id_usuario_asignado: window.aplicacion.campo.selector.id_usuario_asignado
		},
		tabla = {
      elemento: $(tablaRegistros),
      clase: new Tabla({
        tabla: $(tablaRegistros),
        columna: {
          peticion: {
            ruta: `${window.aplicacion.enlace}/ejecutar`,
            parametro: { procedimiento: 'p_traer_encabezado_registros'}
          }
        },
        datos: {
          peticion: {
            ruta: `${window.aplicacion.enlace}/ejecutar`,
            parametro: {
              procedimiento: 'p_traer_seguimientos',
							id_entidad: () => tabla.boton.visualizar.textContent === 'Filtrar' ? 0 : id_entidad.value,
							desde_fecha: '20230101'
            }
          }
        },
				configuracion: {
					dom: `
						<'row justify-content-between'<'col-11'f><'col-auto'>>
						t
						<'row justify-content-between'<'col-auto'B><'col-auto'p>>
					`
				}
      }),
			boton: { visualizar: document.createElement('button') }
		}

	// !
	tabla.boton.visualizar.id = 'botonVisualizar';
	tabla.boton.visualizar.className = 'btn btn-primary';
	tabla.boton.visualizar.textContent = 'Filtrar';

	// !
	await tabla.clase.inicializar();
	tabla.instancia = tabla.elemento.DataTable();
	tablaRegistros_wrapper.querySelector(':first-child .col-auto').appendChild(tabla.boton.visualizar);

	// !
	if (peticion.parametro) {

		campo.id_contacto.parametros();
		campo.id_contacto.peticion('opciones');

		// + Condición para verificar si la
		// + petición existe y cancelarla
		peticion.actual && peticion.actual.abort();

		// + Petición hacía el
		// + controlador 'traerRegistros'
		peticion.actual = $.ajax({
			url: `${window.aplicacion.enlace}/ejecutar`,
			data: {
				procedimiento: 'p_traer_unico_registro',
				renglon: 'SEGUIMIENTO',
				id_renglon: peticion.parametro
			},
			beforeSend: function(peticion, configuracion) {},
			success: async function(respuesta, estado, peticion) {

				// +
				if(!respuesta.length)
					return
				;

				// +
				respuesta = respuesta[0];

				// !
				id_entidad.value = respuesta.id_entidad;

				// +
				campo.id_contacto.parametros();
				await campo.id_contacto.peticion('opciones');

			},
			error: function(peticion, estado) {},
			complete: async function(peticion, estado) {},
			formulario: { elemento: formularioSeguimientos }
		})

	}

	// !
	$(id_cliente).focusout(function(evento) {

		// +
		const camposLimpiar = $([id_cliente, cliente, id_entidad ])

		// +
		if (!this.value)
			return camposLimpiar.trigger('reset')
		;

		// + Condición para verificar si la
		// + petición existe y cancelarla
		peticion.actual && peticion.actual.abort();

		// + Petición hacía el
		// + controlador 'traerRegistros'
		peticion.actual = $.ajax({
			url: `${window.aplicacion.enlace}/ejecutar`,
			data: {
				procedimiento: 'p_traer_unico_registro',
				renglon: 'CLIENTE',
				id_renglon: this.value
			},
			beforeSend: function(peticion, configuracion) { $([id_cliente, cliente, id_entidad ]).trigger('reset') },
			success: async function(respuesta, estado, peticion) {

				// +
				if(!respuesta.length)
					return
				;

				// +
				respuesta = respuesta[0];

				// +
				campo.id_cliente.value = respuesta.id_cliente;
				cliente.value = respuesta.cliente;
				id_entidad.value = respuesta.id_entidad;
				correo.value = respuesta.correo;

			},
			error: function(peticion, estado) {},
			complete: async function(peticion, estado) {

				// !
				campo.id_contacto.parametros();
				await campo.id_contacto.peticion('opciones');

				// +
				$('button[data-accion="crear"]').prop('disabled',false)

			},
			campo: { elemento: this }
		})

	});

	// !
	$(document).on('click', '#ventanaEmergenteCrearContactos button[type="submit"]', function(evento){

		$('#formularioVentanaEmergenteCrearContactos').find('input[name="id_entidad"]').val(
			$('#formularioSeguimientos').find('#id_entidad').val()
		);

	});

	// !
	$(botonVisualizar).click(function (evento) {

		// +
		if (!id_entidad.value)
			return
		;

		// +
		this.innerText = this.innerText === 'Filtrar' ? 'Todos' : 'Filtrar';

		// +
		tabla.instancia.ajax.reload()

	});

	// // !
	// $(botonAgregar).click(function(evento) {

	// 	// +
	// 	let datos_tabla = {
	// 		estado: id_estado_subtarea.value,
	// 		detalle: detalle_subtarea.value,
	// 		fecha_entrega: fecha_entrega.value,
	// 		encargado: $('#id_usuario option:selected').text().trim()
	// 	}

	// 	let formulario = {
	// 		campos: {
	// 			contenedor: function() { return this.validar.closest('.row') },
	// 			validar: $('[name="id_estado_subtarea"], [name="detalle_subtarea"], [name="fecha_entrega"],[name="id_usuario"]')
	// 		}
	// 	}

	// 	// +
	// 	formulario.campos.contenedor().find('.is-invalid').removeClass('is-invalid');

	// 	// +
	// 	$('#ventanaEmergenteAlerta .modal-header')
	// 		.removeClass('bg-success')
	// 		.addClass('bg-danger')
	// 	;

	// 	if (formulario.campos.contenedor().find('.is-invalid').length)
	// 		return
	// 	;

	// 		$(tablaRegistros).DataTable().row.add(datos_tabla).draw(false);

	// 		formulario.campos.validar.trigger('reset')

	// });

	// !
	$(botonEnviarCorreo).click(function (evento) {

		// !
		if(id_seguimiento.value){

			// +
			enviarCorreo({
				token: $('[name="_token"]').val(),
				id_seguimiento: id_seguimiento.value,
				correo_destino: correo.value
			},evento);

		}

	});

	// !
	$(formularioSeguimientos).on('reset', function(evento) {

		// +
		if (botonVisualizar.innerText === 'Todos')
			botonVisualizar.innerText = 'Filtrar'
		;

		// +
		traerFechas();

	});

	// !
  $('#tablaRegistros tbody').on('dblclick','tr', function (evento) {

		// + Condición para verificar si la
    // + petición existe y cancelarla
    peticion.actual &&
    peticion.actual.abort();

    // + Petición hacía el
    // + controlador 'traerRegistros'
    peticion.actual = $.ajax({
      url: `${window.aplicacion.enlace}/ejecutar`,
      type: 'GET',
      data: {
        procedimiento: 'p_traer_unico_registro',
        renglon: 'SEGUIMIENTO',
				id_renglon: $(evento.currentTarget).find('.id').text()
      },
      beforeSend: function(peticion, configuracion) {},
      success: async function(respuesta, estado, peticion) {

				// !
				id_entidad.value = respuesta[0].id_entidad;

				// !
				campo.id_contacto.parametros();
				await campo.id_contacto.peticion('opciones');

			},
      error: function(peticion, estado) {},
      complete: async function(peticion, estado) {

				// +
				botonEnviarCorreo.disabled = false;

				// +
				$('button[data-accion="crear"]').prop('disabled',false)

			},
      formulario: { elemento: formularioSeguimientos }
    });

  });

	// !
	function enviarCorreo(datos,evento) {

		let
			elemento = botonEnviarCorreo
		;

		// + Condición para verificar si la
    // + petición existe y cancelarla
    peticion.actual &&
    peticion.actual.abort();

		// + Petición hacía el
    // + controlador 'traerRegistros'
    peticion.actual = $.ajax({
		url: `${window.aplicacion.enlace}/ejecutar`,
		type: 'GET',
		data: {
			procedimiento: 'p_traer_seguimientos_datos',
			renglon: 'DATOS_CORREO',
			id_seguimiento: datos.id_seguimiento
		},
		dataType: 'JSON',
		beforeSend: function(peticion, configuracion) { elemento.disabled = true },
		success: async function(respuesta, estado, peticion) {

			// !
			$.ajax({
				url: `${window.aplicacion.enlace}/correo`,
				type: 'POST',
				headers: {
					'X-CSRF-TOKEN': datos.token
				},
				data: {
					tipo_correo: 'seguimientos',
					asunto: respuesta.find(item => item.grupo === 'DATOS' && item.elemento === 'ASUNTO').nombre,
					correo_destino: `${'prueba@gmail.com'},${datos.correo_destino ?? ''}`,
					cuerpo: respuesta
				},
				dataType: 'JSON',
				beforeSend: function(peticion, configuracion) {},
				success: function(respuesta, estado, peticion) {},
				error: function(peticion, configuracion) {},
				complete: function(peticion, configuracion) {

					if(peticion.status === 200) {

						if(evento?.target.id === 'botonEnviarCorreo' )
						{

							// +
							$('#ventanaEmergenteAlerta .modal-header')
								.removeClass('bg-danger')
								.addClass('bg-success')
							;

							// +
							$('#ventanaEmergenteAlerta .modal-body p').text(`Correo Enviado Exitosamente`).css({
								'font-size': '16px',
								'text-align': 'center'
							});

							// +
							$(ventanaEmergenteAlerta).modal('show');

							// +
							elemento.disabled = false;

						}

					}

					else {

						// +
						$('#ventanaEmergenteAlerta .modal-header')
							.removeClass('bg-success')
							.addClass('bg-danger')
						;

						// +
						$('#ventanaEmergenteAlerta .modal-body p')
						.text(`Hubo un error al enviar el correo. Por favor intente de nuevo.`);

						// +
						$(ventanaEmergenteAlerta).modal('show');

					}

				}

			});

		}

		});

	}

	// !
	const traerFechas = () => {

		// !
		$.ajax({
			url: `${window.aplicacion.enlace}/ejecutar`,
			data: {
				procedimiento: 'p_traer_fechas',
				renglon: 'SEGUIMIENTOS',
				programa: 'registros.seguimientos'
			},
			success: function (respuesta) {

				respuesta = respuesta[0];

				$.each(respuesta, (indice, valor) => respuesta[indice] = respuesta[indice].split(' ')[0]);

				fecha.value = respuesta.desde_fecha;

				fecha_compromiso.value = respuesta.desde_fecha;

			}
		});

	}

	// !
  $(document).on('ajaxSuccess', async (evento, configuracion) => {

    if (
      window.aplicacion.peticion.formulario.elemento === formularioSeguimientos &&
      window.aplicacion.peticion.formulario.exitosa.propiedades === window.aplicacion.peticion.exitosa.propiedades &&
			new URLSearchParams(window.aplicacion.peticion.exitosa.configuracion.url).get('renglon') === 'guardar'
    )
      {

				// +
				$('#ventanaEmergenteAlerta .modal-body p').attr('style', '');

				// +
				$("#tablaRegistros").DataTable().ajax.reload();

				// +
				if(Number(window.aplicacion.peticion.formulario.exitosa.configuracion.data.get('enviar_correo'))){

					// +
					enviarCorreo({
						token: $('[name="_token"]').val(),
						id_seguimiento: window.aplicacion.peticion.formulario.exitosa.propiedades.responseJSON[0].id_registro,
						correo_destino: window.aplicacion.peticion.formulario.exitosa.configuracion.data.get('correo')
					});

					console.log(window.aplicacion.peticion.formulario.exitosa.configuracion.data.get('enviar_correo'))
				}

				// +
				$('button[data-accion="crear"]').prop('disabled',false);

				// +
				traerFechas();

			}
  });

})()
