var tabla;
function init(){
    //listar();
    //listaregreso();

    $("#frmForm").on("submit", function(e) {
        guardaryeditar(e);
    });

    $("#frmFormEgreso").on("submit", function(e) {
        guardaryeditarEgreso(e);
    });

    $.post("../../ajax/contrato.php?op=selectContrato", function(r){
      if ($.fn.select2 && $('#idcontrato').data('select2')) {
        $('#idcontrato').select2('destroy');
      }

      $("#idcontrato").html('<option value="">Seleccione un Contrato</option>'); 
      // Actualizar el contenido del select
      $("#idcontrato").append(r);
    
      // Inicializar Select2 nuevamente
      $('#idcontrato').select2({
        theme: 'bootstrap4',
        placeholder: 'Seleccione un Contrato',
        allowClear: true,
      });
    });

    $.post("../../ajax/cliente.php?op=selectEmpleado", function(r){
      if ($.fn.select2 && $('#idempleado').data('select2')) {
        $('#idempleado').select2('destroy');
      }

      $("#idempleado").html('<option value="">Seleccione un Empleado</option>'); 
      // Actualizar el contenido del select
      $("#idempleado").append(r);
    
      // Inicializar Select2 nuevamente
      $('#idempleado').select2({
        theme: 'bootstrap4',
        placeholder: 'Seleccione un Empleado',
        allowClear: true,
      });
    });
}
//Función limpiar
function limpiar()
{
	$("#idusuario").val("");
	$("#nrorecibo").val("");
  $("#descripcion").val("");
  $("#monto").val("");
  $("#fecha").val("");
}
// Función para listar datos
function listar() {
    tabla=$("#ingreso_total").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/ingreso.php?op=listaringreso',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });
}

function listaregreso() {
    tabla=$("#egreso_total").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/ingreso.php?op=listaregreso',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });
}

// Configuración de SweetAlert2 con botones personalizados
const swalWithBootstrapButtons = Swal.mixin({
  customClass: {
    confirmButton: "btn btn-success mx-2", // Añadimos margen (Bootstrap `me-2`) para separar los botones
    cancelButton: "btn btn-danger mx-2"
  },
  buttonsStyling: false
});

// Función para guardar o editar
function guardaryeditar(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnGuardar").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#frmForm")[0]);

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¿Deseas guardar los cambios realizados?",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, guardar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Si el usuario confirma, realizar la solicitud AJAX
      $.ajax({
        url: "../../ajax/ingreso.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Mostrar mensaje de éxito o error según la respuesta del backend
          swalWithBootstrapButtons.fire({
            title: 'Resultado',
            text: datos, // Mostrar el mensaje devuelto por el backend
            icon: datos.includes("Ingreso Registrado") || datos.includes("Ingreso Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Ingreso Registrado") || datos.includes("Ingreso Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "list.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.php";
            }
          });
        },
        error: function (err) {
          // Manejar errores en la solicitud AJAX
          swalWithBootstrapButtons.fire({
            title: 'Error',
            text: 'Hubo un problema con la solicitud. Intente nuevamente.',
            icon: 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón tras un error
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Si el usuario cancela, mostrar un mensaje de cancelación
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnGuardar").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}


function guardaryeditarEgreso(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnGuardar").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#frmFormEgreso")[0]);

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¿Deseas guardar los cambios realizados?",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, guardar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Si el usuario confirma, realizar la solicitud AJAX
      $.ajax({
        url: "../../ajax/ingreso.php?op=guardaryeditarEgreso",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Mostrar mensaje de éxito o error según la respuesta del backend
          swalWithBootstrapButtons.fire({
            title: 'Resultado',
            text: datos, // Mostrar el mensaje devuelto por el backend
            icon: datos.includes("Egreso Registrado") || datos.includes("Egreso Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Egreso Registrado") || datos.includes("Egreso Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "list.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.php";
            }
          });
        },
        error: function (err) {
          // Manejar errores en la solicitud AJAX
          swalWithBootstrapButtons.fire({
            title: 'Error',
            text: 'Hubo un problema con la solicitud. Intente nuevamente.',
            icon: 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón tras un error
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Si el usuario cancela, mostrar un mensaje de cancelación
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnGuardar").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function eliminar(idingreso) {
  const swalWithBootstrapButtons = Swal.mixin({
    customClass: {
      confirmButton: "btn btn-success mx-2",
      cancelButton: "btn btn-danger mx-2"
    },
    buttonsStyling: false
  });

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¡No podrás revertir esto!",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, eliminar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Realizar la eliminación vía AJAX
      $.post("../../ajax/ingreso.php?op=eliminar", { idingreso: idingreso }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "La ingreso ha sido eliminada exitosamente.",
          icon: "success"
        });

        // Recargar la tabla después de eliminar
        tabla.ajax.reload();
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "La ingreso está segura :)",
        icon: "error"
      });
    }
  });
}

$(document).ready(function () {
  // Obtener el parámetro idingreso de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const idingreso = urlParams.get('idingreso');

  if (idingreso) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/ingreso.php?op=mostrar", { idingreso: idingreso }, function (data, status) {
          if (status === "success") {
              const ingreso = JSON.parse(data);

              // Precargar los campos del formulario
              $("#idusuario").val(ingreso.idusuario).trigger('change'); // Actualiza Select2
              $("#idingreso").val(ingreso.idingreso);
              $("#idempleado").val(ingreso.idempleado).trigger('change');
              $("#descripcion").val(ingreso.descripcion);
              $("#fecha").val(ingreso.fecha);
              $("#monto").val(ingreso.monto);
              $("#nrorecibo").val(ingreso.nrorecibo);
              $("#idcontrato").val(ingreso.idcontrato).trigger('change');
              $("#metodo_pago").val(ingreso.metodo_pago).trigger('change');
              $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
              $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar ingreso')

          } else {
              console.error("Error al cargar los datos");
          }
      });
  }
});


$(document).ready(function () {
  // Obtener el parámetro idingreso de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const idegreso = urlParams.get('idegreso');

  if (idegreso) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/ingreso.php?op=mostraregreso", { idegreso: idegreso }, function (data, status) {
          if (status === "success") {
              const egreso = JSON.parse(data);

              // Precargar los campos del formulario
              $("#idegreso").val(egreso.idegreso);
              $("#descripcion").val(egreso.descripcion);
              $("#fecha").val(egreso.fecha);
              $("#monto").val(egreso.monto);
              $("#nrorecibo").val(egreso.nrorecibo);
              $("#idempleado").val(egreso.idempleado).trigger('change');
              $("#metodo_pago").val(egreso.metodo_pago).trigger('change');
              $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
              $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar egreso')

          } else {
              console.error("Error al cargar los datos");
          }
      });
  }
});

function listar_total() {
          var ano= $("#ano").val();
          var mes = $("#mes").val();
          // Validar que las fechas no estén vacías
          if (!ano || !mes) {
            Swal.fire({
              title: "Datos requeridos",
              text: "Por favor, seleccione los datos.",
              icon: "warning",
              confirmButtonText: "Aceptar"
            });
            return;
          }
        tabla=$("#ingreso_total").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/ingreso.php?op=listaringreso',
            type: "POST",
             data: {
              ano: ano,
              mes: mes
            },
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });
   $.post("../../ajax/ingreso.php?op=cantidadTotal", { ano: ano, mes: mes }, function (data, status) {
    data = JSON.parse(data);
    const total_efectivo = parseFloat(data.total_efectivo) || 0;
    const total_transferencia = parseFloat(data.total_transferencia) || 0;
    const totalito = total_efectivo + total_transferencia;

    $("#sumaefectivo").text(total_efectivo.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
    $("#sumatransferencia").text(total_transferencia.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
    $("#sumatotal").text(totalito.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
  });
}

function listar_total_egreso() {
          var ano= $("#ano").val();
          var mes = $("#mes").val();
          // Validar que las fechas no estén vacías
          if (!ano || !mes) {
            Swal.fire({
              title: "Datos requeridos",
              text: "Por favor, seleccione los datos.",
              icon: "warning",
              confirmButtonText: "Aceptar"
            });
            return;
          }
        tabla=$("#egreso_total").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/ingreso.php?op=listarEgreso',
            type: "POST",
             data: {
              ano: ano,
              mes: mes
            },
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });
   $.post("../../ajax/ingreso.php?op=cantidadTotalEgreso", { ano: ano, mes: mes }, function (data, status) {
    data = JSON.parse(data);
    const total_efectivo = parseFloat(data.total_efectivo) || 0;
    const total_transferencia = parseFloat(data.total_transferencia) || 0;
    const totalito = total_efectivo + total_transferencia;

    $("#sumaefectivo").text(total_efectivo.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
    $("#sumatransferencia").text(total_transferencia.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
    $("#sumatotal").text(totalito.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 }));
  });
}

init();