// {} Librerías e importaciones

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

// {}
(async () => {

  // ! Declaración de variables
  let
    peticion = { actual: null },
    campo = {
      monto: window.aplicacion.campo.mascara.monto,
      condicion: window.aplicacion.campo.mascara.condicion,
      tasa: window.aplicacion.campo.mascara.tasa
    },
    tabla = {
      facturas: {
        elemento: $(tablaRegistros),
        clase: new Tabla({
					columna: {
						peticion: {
							ruta: `${window.aplicacion.enlace}/ejecutar`,
							parametro: { procedimiento: 'p_traer_encabezado_procesos'}
						}
					},
          datos: {
            peticion: {
              ruta: `${window.aplicacion.enlace}/ejecutar`,
              parametro: {
                procedimiento: 'p_traer_facturas_entidad',
                id_entidad: () => !id_entidad.value ? -1 : id_entidad.value,
                // desde: '17530101',
                // hasta: '30000101'
              }
            }
          },
          configuracion: { dom: `ft`, pageLength: -1 }
        })
      }
    }

  // !
  await tabla.facturas.clase.inicializar();
  tabla.facturas.instancia = tabla.facturas.elemento.DataTable();

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

    // +
    if (!this.value)
      return formularioFactura.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: 'SUPLIDOR',
        id_renglon: this.value
      },
      beforeSend: (peticion, configuracion) => formularioFactura.reset(),
      success: function(respuesta, estado, peticion) {

        if (!respuesta.length)
          return
        ;

        respuesta = respuesta[0];

        id_entidad.value = respuesta.id_entidad;
        window.aplicacion.campo.mascara.id_suplidor.value = respuesta.id_suplidor;
        suplidor.value = respuesta.suplidor;
        identificacion.value = respuesta.identificacion;
        campo.condicion.value = respuesta.condicion

      },
      error: function(peticion, estado) {},
      complete: (peticion, estado) => tabla.facturas.instancia.ajax.reload()
    })

  });

  // !
  $(id_nomina).unbind('select2:close');

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

    // +
    if (!this.value)
      return $([ncf, fecha, monto, concepto, nota]).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_factura_entidad',
				renglon: 'SUPLIDOR',
        id_entidad: id_entidad.value,
        numero_factura: numero_factura.value
      },
      beforeSend: (peticion, configuracion) => $([ncf, fecha, monto, concepto, nota]).trigger('reset'),
      success: function(respuesta, estado, peticion) {},
      error: function(peticion, estado) {},
      complete: (peticion, estado) => tabla.facturas.elemento.trigger('draw'),
			formulario: { elemento: formularioFactura }
    })

  });

  // !
  $(id_moneda).change(function() {

    tasa.disabled = (!this.value || this.value == 1)

  });

  // !
  tabla.facturas.elemento.find('tbody').on('dblclick', 'tr', function(evento) {

    if (this.querySelector('.dataTables_empty') || this.classList.contains('dtrg-group'))
      return
    ;

    $(numero_factura).val(
      tabla.facturas.instancia.cell(this, '[data-columna-nombre=numero_factura]').data()
    ).trigger('focusout')

  })

})()
