// {} Librerías e importaciones

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

// {}
(() => {

  // ! Declaración de variables
  let
    peticion = {
      actual: null
    },
		campo = {
      id_nomina: window.aplicacion.campo.selector.id_nomina,
      monto_factura: window.aplicacion.campo.mascara.monto_factura,
      monto_nomina: window.aplicacion.campo.mascara.monto_nomina,
      total: window.aplicacion.campo.mascara.total,
      porciento: window.aplicacion.campo.mascara.porciento,
      monto_gestion: window.aplicacion.campo.mascara.monto_gestion
		}
	;

  // !
  new Tabla({
    datos: {
      peticion: {
        ruta: `${window.aplicacion.enlace}/ejecutar`,
        parametro: {
          procedimiento: 'p_traer_datos_cierre_nomina',
          renglon: 'EMPLEADOS',
          id_nomina: -1
        }
      }
    },
    configuracion: {
      dom: `t`,
      pageLength: -1
    }
  }).inicializar();

  // !
  new Tabla({
    tabla: $(tablaRegistrosFacturas),
    datos: {
      peticion: {
        ruta: `${window.aplicacion.enlace}/ejecutar`,
        parametro: {
          procedimiento: 'p_traer_datos_cierre_nomina',
          renglon: 'FACTURAS',
          id_nomina: -1
        }
      }
    },
    configuracion: {
      dom: `t`,
      pageLength: -1
    }
  }).inicializar();

	// !
	setTimeout(() => {

		// +
		$(id_nomina).trigger('select2:select');

	}, 1500);

  // !
  $(id_nomina).on('select2:select', function(evento) {

    // +
    if (!this.value)
      return formularioCerrarNomina.reset()
    ;

    // +
    botonBuscar.disabled = false;

    // + 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: 'NOMINA',
        id_renglon: this.value
      },
      beforeSend: function(peticion, configuracion) {

				// +
				formularioCerrarNomina.reset();

			},
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {},
      formulario: { elemento: formularioCerrarNomina }
    })

  });

  $(botonBuscar).click(function (e) {

    // +
    botonGuardar.disabled = false;
		id_nomina.disabled = true;
    this.disabled = true;

    // ?
    llenarDatos();

  });

  $(botonLimpiar).click(function (e){

    // +
    id_nomina.disabled = false;
    botonBuscar.disabled = false;
		monto_gestion.disabled = true;

		$(id_nomina).trigger('select2:select');

  });

  function llenarDatos() {

    // + 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_datos_cierre_nomina',
        renglon: 'RESUMEN',
        id_nomina: id_nomina.value
      },
      beforeSend: function(peticion, configuracion) {},
      success: function(respuesta, estado, peticion) {

        // +
        $.each(respuesta[0], function (indice, elemento) {

        // +

				if(campo[indice])
					campo[indice].unmaskedValue = elemento.replace(',','')

        });

        monto_gestion.disabled = false;
      },
      error: function(peticion, estado) {},
      complete: function(peticion, estado) {},
      formulario: { elemento: formularioCerrarNomina }
    });

    // ?
    [$('#tablaRegistros'), tablaRegistrosFacturas].forEach(function(tabla) {

      $(tabla)
        .dataTable()
        .fnSettings()
        .ajax
        .data
        .id_nomina = id_nomina.value
      ;

      // ?
      $(tabla).DataTable().ajax.reload();
    });
  }

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

    window.aplicacion.peticion.formulario.elemento === formularioCerrarNomina &&
    window.aplicacion.peticion.formulario.exitosa.propiedades === window.aplicacion.peticion.exitosa.propiedades &&
    campo.id_nomina.peticion('opciones')

  })

})()
