var tabla;
function init(){
    
    $("#frmForm").on("submit", function(e) {
        guardar_pago(e);
    });

    $.post("../../ajax/cliente.php?op=selectCliente", function(r) {
        if ($.fn.select2 && $('#idpersona').data('select2')) {
          $('#idpersona').select2('destroy');
        }
            // Limpiar las opciones antes de agregar las nuevas
        $("#idpersona").html('<option value="">Seleccione Cliente </option>'); 
        // Actualizar el contenido del select con las opciones de producto
        $("#idpersona").append(r);
        // Inicializar Select2 nuevamente
        $('#idpersona').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un cliente ',
          allowClear: true,
        });
      });
      

    }

//Función limpiar
function limpiar()
{
	  $("#idcontrato").val("");
    $("#fecha_hora").val("");
    $("#nrcontrato").val("");
   
    
}
// 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 guardar_pago(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) {
        Swal.fire({
        title: "Registrando Pago...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/contrato.php?op=guardar_pago",
        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("Pago Registrado") || datos.includes("Pago Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Pago Registrado") || datos.includes("Pago 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
  });
}

$(document).ready(function () {
  const idcontrato = new URLSearchParams(window.location.search).get('idcontrato');
  if (idcontrato) {
    $("#idcontrato").val(idcontrato); // Para que esté disponible en el DOM
    recargarAcuentas();
  }
});


function recargarAcuentas() {

  const idcontrato = $("#idcontrato").val();

  if (!idcontrato) return;
let saldoDisponible = 0; // Declarar fuera para que sea accesible
  $.post("../../ajax/contrato.php?op=mostrar_acuenta", { idcontrato: idcontrato }, function (data, status) {
    if (status === "success") {
      const response = JSON.parse(data);
      if (response.contratos && response.contratos.length > 0) {
        const contrato = response.contratos[0];

        let totalContrato = parseFloat(contrato.total_contrato) || 0;
        let totalAcuenta = parseFloat(contrato.totalMonto) || 0;
        saldoDisponible = totalContrato - totalAcuenta;

        $("#idcontrato").val(contrato.idcontrato);
        $("#fecha_hora").val(contrato.fecha_hora);
        $("#nrocontrato").val(contrato.nrocontrato);
        $("#total_venta").val(totalContrato.toFixed(2));
        $("#total_acuenta").val(totalAcuenta.toFixed(2));

        if (saldoDisponible === 0) {
          $("#btnGuardar").hide();
        } else {
          $("#btnGuardar").show();
        }

        setTimeout(() => {
          $("#idpersona").val(contrato.idcliente).trigger('change');
        }, 300);
      }

       $("#monto_acuenta").on("input", function () {
          let montoIngresado = parseFloat($(this).val()) || 0;

          if (montoIngresado > saldoDisponible) {
            Swal.fire({
              icon: 'error',
              title: 'Monto excedida',
              text: `El monto no puede exceder al acuenta resta (${saldoDisponible}).`,
              confirmButtonText: 'Aceptar',
              timer: 3000
          });
              $(this).val(""); // Borra el valor ingresado incorrecto
          }
      });

      // Recargar detalles de la tabla
      $('#detalles_acuenta tbody').empty();
      for (let i = 0; i < response.detalles.length; i++) {
        const detalle = response.detalles[i];
        const metodo = (detalle.metodo_pago == '1') ? 'Efectivo'
                      : (detalle.metodo_pago == '2') ? 'Transferencia Empresa'
                      : 'Transferencia Carlos';

        const fila = `
          <tr>
            <td><button type="button" class="btn btn-danger btn-flat btn-xs" onclick="eliminarDetalle(${detalle.idingreso})"><i class="fa fa-trash"></i></button></td>
            <td><input type="text" class="form-control" readonly value="${detalle.nrorecibo}"></td>
            <td><input type="text" class="form-control" readonly value="${detalle.descripcion}"></td>
            <td><input type="text" class="form-control" readonly value="${parseFloat(detalle.monto).toFixed(2)}"></td>
            <td><button type="button" class="btn btn-primary btn-xs">${metodo}</button></td>
            <td><input type="text" class="form-control" readonly value="${detalle.fecha}"></td>
          </tr>`;
        $('#detalles_acuenta tbody').append(fila);
      }

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

function eliminarDetalle(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/venta.php?op=eliminarDetalle", { idingreso: idingreso }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "La cuota ha sido eliminada exitosamente.",
          icon: "success"
        });
         // Limpiar el tbody antes de volver a cargar
        $('#detalles_acuenta tbody').empty();

        // Recargar datos
        recargarAcuentas();
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "La cuota está segura :)",
        icon: "error"
      });
    }
  });
}







init();