var tabla;
var tablaventa;
function validarTipoDocumento(preloading = false) {
  const tipoDocumento = $('#idtipo_documento').val(); // Obtiene el ID del tipo de documento seleccionado
  const numDocumentoInput = $('#num_documento');
  const numDocumentoHelp = $('#num_documento_help');

  if (!preloading) {
      numDocumentoInput.val(''); // Reinicia el campo de número de documento
  }
  numDocumentoHelp.text(''); // Limpia el texto de ayuda

  // Aplica validaciones según el tipo de documento
  if (tipoDocumento === '1') { // Asume que '1' es DNI
      numDocumentoInput.attr('data-maxlength', 8); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 8 dígitos (DNI).');
  } else if (tipoDocumento === '2') { // Asume que '2' es RUC
      numDocumentoInput.attr('data-maxlength', 11); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 11 dígitos (RUC).');
  } else {
      numDocumentoInput.removeAttr('data-maxlength'); // Quita cualquier restricción si no aplica
      numDocumentoHelp.text('Seleccione un tipo de documento válido.');
  }
}
function init(){
    listar_contrato();
    listar_stock();
    listar_venta();
   
    $("#frmForm").on("submit", function(e) {
        guardaryeditar(e);
    });

    $("#clienteForm").on("submit", function(e) {
      guardarCliente(e);
    });

    $("#difuntoForm").on("submit", function(e) {
      guardarDifunto(e);
    });

    $("#detalle_difuntoForm").on("submit", function(e) {
      guardarDetalle(e);
    });


    $.post("../../ajax/cliente.php?op=selectTipoDocumento", function(r){
      if ($.fn.select2 && $('#idtipo_documentoo').data('select2')) {
        $('#idtipo_documentoo').select2('destroy');
      }
      // Actualizar el contenido del select
      $("#idtipo_documentoo").html(r);
    
      // Inicializar Select2 nuevamente
      $('#idtipo_documentoo').select2({
        theme: 'bootstrap4',
        placeholder: 'Seleccione Tipo Documento',
        allowClear: true,
      });
      // Ejecuta la validación inicial después de cargar el select
      validarTipoDocumento();
    });

    $.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,
        });
      });

      $.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,
      });
    });

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

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

        

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

    // Evento change para actualizar la validación cuando se cambia el tipo de documento
      $('#idtipo_documento').on('change', validarTipoDocumento);

      // Validación en tiempo real para restringir la longitud del número
      $('#num_documento').on('input', function () {
          const maxLength = $(this).attr('data-maxlength'); // Obtiene el valor máximo permitido
          const value = $(this).val();

          if (maxLength && value.length > maxLength) {
              $(this).val(value.slice(0, maxLength)); // Trunca el valor a la longitud máxima
          }
      });

     $('#tipo_contrato').on('change', function () {
        const tipo = $(this).val();
        let opciones = '<option value="">Seleccione Tipo Ingreso</option>';

        if (tipo === "1") { // Contado
          opciones += `
            <option value="1">Contado Sepelio</option>
            <option value="2">Contado Futuro</option>
            <option value="3">Contado COVID</option>
          `;
          $('#table_pagos').show(); // 👉 Mostrar la tabla de pagos
        } else if (tipo === "2") { // Crédito
          opciones += `
            <option value="4">Credito Sepelio</option>
            <option value="5">Credito Futuro</option>
          `;
          $('#table_pagos').hide(); // 👉 Ocultar la tabla de pagos
        } else if (tipo === "3") { // Futuro
          opciones += `<option value="6">Plan a Futuro</option>`;
          $('#table_pagos').hide(); // 👉 Ocultar la tabla de pagos
        } else if (tipo === "4") { // Futuro
          opciones += `<option value="7">Donacion Nicho</option>`;
         // $('#table_pagos').hide(); // 👉 Ocultar la tabla de pagos
        } else {
          $('#table_pagos').hide(); // Por defecto ocultar si se resetea
        }

        $('#tipo_ingreso').html(opciones);
      });

      $(document).ready(function () {
      $('#iddifunto').on('change', function () {
        const difuntoSeleccionado = $(this).val();
        if (difuntoSeleccionado) {
          $('#datosDifunto').show();
        } else {
          $('#datosDifunto').hide();
          // Limpiar campos opcionalmente
          $('#descripcion_fallecimiento').val('');
          $('#fecha_entierro').val('');
          $('#idfuneraria').val('');
        }
      });
    });

     document.addEventListener('DOMContentLoaded', function () {
      const checkbox = document.getElementById('estado_vendedor');
      const empleadoContainer = document.getElementById('empleado_container');

      if (checkbox && empleadoContainer) {
        checkbox.addEventListener('change', function () {
          empleadoContainer.style.display = this.checked ? 'block' : 'none';
        });

        // Mostrar u ocultar en base al estado inicial al cargar la vista
        empleadoContainer.style.display = checkbox.checked ? 'block' : 'none';
      }
    });




//Función limpiar
function limpiar()
{
	$("#idventa").val("");
  $("#fecha_hora").val("");
	$("#nroguia").val("");
  $("#nrocorrelativo").val("");
    
}


function listar_contrato() {
    tabla=$("#contrato_listar").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/contrato.php?op=listarcontrato',
            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,
          "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
    });
}

function listar_venta() {
    tabla=$("#venta_listar").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/contrato.php?op=listar_venta',
            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,
          "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
    });
}


function listar_stock() {

  //console.log(idproducto);
    tabla=$("#modal_nicho").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/contrato.php?op=listar_stock',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                Swal.fire({
                  icon: 'error',
                  title: 'Producto sin Combinaciones',
                  text: `El producto no tiene Combinaciones.`,
                  confirmButtonText: 'Aceptar',
                  timer: 3000
                }).then(() => {
                  // Recargar la página después de cerrar la alerta
                  location.reload();
              });
            }
        },
        "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
    });

}



let detalles = 0;
let cont = 0;

function agregarDetalle(iddetalle_pabellon,fila,columna,precio_venta,nombre_pabellon,nombreDifunto,filaBoton) {
    let cantidad = 1;
    let precio_adicional = 0.00;
    const nombreMostrado = nombreDifunto && nombreDifunto.trim() !== '' ? nombreDifunto : 'S/D';
    // Validar que el código no esté repetido
    if (codigoYaExiste(iddetalle_pabellon)) {
      Swal.fire({
          icon: 'error',
          title: 'Nicho duplicado',
          text: `El nicho con codigo ${iddetalle_pabellon} ya está agregado.`,
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      return; // Salir de la función para evitar agregar el artículo duplicado
  }
    if (nombre_pabellon !== "") {
        const subtotal = cantidad * precio_venta;

        const filaa = `
            <tr class="filas" id="fila${cont}">
                <td><button type="button" class="btn btn-danger btn-xs btn-flat" onclick="eliminarDetalle(${cont})"><i class="fa fa-trash"></i></button>
                <button type="button" class="btn btn-sm btn-dark btn-xs btn-flat" onclick="abrirModalDifunto(${iddetalle_pabellon})"><i class="fa fa-user"></i></button></td>
                <td>
                  <span class="badge badge-success" id="nombre_difunto${iddetalle_pabellon}">${nombreMostrado}</span>
                </td>
                <td>
                    <input type="hidden"  name="iddetalle_pabellon[]" value="${iddetalle_pabellon}">
                    ${nombre_pabellon}
                </td>
                <td><input readonly class="form-control" type="text" name="fila[]" value="${fila}"></td>
                <td><input readonly class="form-control" type="text" name="columna[]" value="${columna}"></td>
                <td>
                    <input type="number" class="form-control" name="cantidad[]" id="cantidad${cont}" value="${cantidad}" max="1" data-stock="1">
                </td>
                <td><input type="number" class="form-control" step="0.01" name="precio_venta[]" id="precio_venta${cont}" value="${precio_venta.toFixed(2)}"></td>
                <td><input type="number" class="form-control" step="0.01" name="precio_adicional[]" id="precio_adicional${cont}" value="${precio_adicional.toFixed(2)}"></td>
                <td><span name="subtotal" id="subtotal${cont}">${subtotal.toFixed(2)}</span></td>
            </tr>
        `;
        detalles++;
        $('#detalles').append(filaa);
        $(`#cantidad${cont}`).on('keyup change', function () {
          validarStock(this);
          modificarSubtotales();
          });

        $(`#cantidad${cont}, #precio_venta${cont},#precio_adicional${cont}`).on('keyup change', modificarSubtotales);
        cont++;
        modificarSubtotales();
        
        $(filaBoton).closest('tr').remove();  // Esto elimina la fila en el modal
    } else {
        Swal.fire({
          icon: 'error',
          title: 'Error',
          text: 'Error al ingresar el detalle, revisar los datos del nicho',
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
    }
    //evaluar();
}

function abrirModalDifunto(indexx) {
  $('#iddetalle_difunto').val(indexx);
  $('#modalDifunto').modal('show');

 $.post("../../ajax/contrato.php?op=mostrar_difunto", { detalle_pabellonid: indexx }, function (data, status) {
      if (status === "success") {
        const response = JSON.parse(data);
        if (response.pabellon_detalle && response.pabellon_detalle.length > 0) {
              const responsee = response.pabellon_detalle[0]; // Primer corte
          $('#iddifunto').val(responsee.iddifunto).trigger('change');
          $('#idfuneraria').val(responsee.idfuneraria).trigger('change');
          $('#descripcion_fallecimiento').val(responsee.descripcion_fallecimiento);
          $('#fecha_fallecimiento').val(responsee.fecha_fallecimiento);
          $('#fecha_entierro').val(responsee.fecha_entierro);
        } else {
          // Si no hay datos, limpiar
          $('#iddifunto').val('').trigger('change');
          $('#idfuneraria').val('').trigger('change');
          $('#descripcion_fallecimiento').val('');
          $('#fecha_fallecimiento').val('');
          $('#fecha_entierro').val('');
        }
      }
    });
}

    $('#iddifunto').on('change', function () {
      const nombreDifunto = $("#iddifunto option:selected").text();
      const index = $('#iddetalle_difunto').val(); // índice de la fila

      // Actualiza el nombre en la tabla
      $(`#nombre_difunto${index}`).text(nombreDifunto || "Sin asignar");
    });

// Función para validar si el código ya existe
  function codigoYaExiste(iddetalle_pabellon) {
  let existe = false;
  $("input[name='iddetalle_pabellon[]']").each(function () {
    if (parseInt($(this).val()) === parseInt(iddetalle_pabellon)) {
      existe = true;
      return false; // detener el bucle
    }
  });
  return existe;
}

function validarStock(elemento) {
      const stock = parseFloat($(elemento).data('stock'));
      const cantidad = parseFloat($(elemento).val());

      if (cantidad > stock) {
            Swal.fire({
              icon: 'error',
              title: 'Cantidad excedida',
              text: `La cantidad no puede exceder el stock disponible (${stock}).`,
              confirmButtonText: 'Aceptar',
              timer: 3000
          });
          $(elemento).val(stock); // Ajustar al valor máximo permitido
      }
}

function modificarSubtotales() {
      const cantidades = document.getElementsByName("cantidad[]");
      const precios = document.getElementsByName("precio_venta[]");
      const precios_adicional = document.getElementsByName("precio_adicional[]");
      const subtotales = document.getElementsByName("subtotal");
      let totalSubtotal = 0;
      let igv = 0;
      let gravado = 0;
      var total = 0.0;
      for (let i = 0; i < cantidades.length; i++) {
            // Convierte los valores de cantidad y precio a números o usa 0 si están vacíos
        const cantidad = parseFloat(cantidades[i].value) || 0;
        const precio = parseFloat(precios[i].value) || 0;
        const precio_adicional = parseFloat(precios_adicional[i].value) || 0;

        // Calcula el subtotal
        const subtotal = parseFloat((cantidad * precio) + precio_adicional);

        // Actualiza el valor del subtotal
        subtotales[i].value = subtotal.toFixed(2);
        document.getElementsByName("subtotal")[i].innerHTML=(subtotal).toFixed(2); // Usa value en lugar de textContent
        totalSubtotal += parseFloat(subtotales[i].value) || 0;
        
        
      
      }

      const interes = parseFloat(document.getElementById("intereses_total").value) || 0;

       total = totalSubtotal + interes;
       gravado = total / 1.18;
       igv = gravado * 0.18;

      document.getElementById("subtotal_total").value = gravado.toFixed(2);
      document.getElementById("total_igv").value = igv.toFixed(2);
      document.getElementById("total_venta").value = total.toFixed(2);
      // Llama a la función para calcular los totales generales
      
}

function evaluar() {
    if (detalles > 0) {
        $("#btnGuardar").show();
    } else {
        $("#btnGuardar").hide();
        cont = 0;
    }
}

// Función para eliminar una fila
function eliminarDetalle(index) {
  $("#fila" + index).remove();
  cont--;
  detalles = detalles - 1;
  modificarSubtotales(); // Recalcular los totales después de agregar una fila
 // evaluar();  // Llamar a la función para ocultar el botón si no hay detalles
}


  let contadorCuotas = 1;

  $('#btnAgregarPago').on('click', function () {
    const hoy = new Date().toISOString().split('T')[0]; // Formato YYYY-MM-DD
    const fila_cuota = `
      <tr id="filaPago${contadorCuotas}">
        <td>
          <button type="button" class="btn btn-danger btn-xs btn-flat" onclick="eliminarFilaPago(${contadorCuotas})">
            <i class="fa fa-trash"></i>
          </button>
        </td>
        <td><input type="text" name="nro_comprobante[]" class="form-control" placeholder="Nro Recibo" required></td>
        <td><input type="text" name="descripcion_pago[]" class="form-control" placeholder="Descripcion"></td>
        <td><input type="number" step="0.01" name="monto_pago[]" class="form-control" placeholder="0.00" required></td>
        <td>
          <select name="metodo_pago[]" class="form-control" required>
            <option value="1">Efectivo</option>
            <option value="2">Transferencia Empresa</option>
            <option value="3">Transferencia Carlos</option>
          </select>
        </td>
        <td><input type="date" name="fecha_pago[]" class="form-control" value="${hoy}" required></td>
      </tr>
    `;
    $('#detalles_cuota tbody').append(fila_cuota);
    contadorCuotas++;
  });

  function eliminarFilaPago(id) {
    $('#filaPago' + id).remove();
  }


// 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) {
       Swal.fire({
        title: "Registrando Contrato...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/contrato.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("Contrato Registrado") || datos.includes("Contrato Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Contrato Registrado") || datos.includes("Contrato 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 guardarCliente(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnCliente").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#clienteForm")[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 Cliente...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/cliente.php?op=guardarCliente",
        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("Cliente Registrado") || datos.includes("Cliente Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Cliente Registrado") || datos.includes("Cliente Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "create.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(() => {
            $("#btnCliente").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(() => {
    $("#btnCliente").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function guardarDifunto(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnDifunto").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#difuntoForm")[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 Difunto...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/difunto.php?op=guardarDifunto",
        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("Difunto Registrado") || datos.includes("Difunto Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Difunto Registrado") || datos.includes("Difunto Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "create.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(() => {
            $("#btnDifunto").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(() => {
        $("#btnDifunto").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnDifunto").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function guardarDetalle(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnDetalle").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#detalle_difuntoForm")[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 Difunto...",
        html: "Por favor, espera mientras se guardan los datos.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });
      $.ajax({
        url: "../../ajax/contrato.php?op=guardarDetalle",
        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("Registro Actualizado") || datos.includes("Registro Actualizado") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Registro Actualizado") || datos.includes("Registro Actualizado")) {
              // Redirigir al listado si la operación fue exitosa
              //window.location.href = "create.php";
              //limpiar();
              //$('#iddifunto').val('').trigger('change');
              $('#idfuneraria').val('').trigger('change');
              $('#descripcion_fallecimiento').val('');
              $('#fecha_fallecimiento').val('');
              $('#fecha_entierro').val('');
              $('#modalDifunto').modal('hide');
            } 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(() => {
            $("#btnDetalle").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(() => {
        $("#btnDetalle").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnDetalle").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function eliminar(idcontrato) {
  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/contrato.php?op=eliminar", { idcontrato: idcontrato }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "El contrato ha sido eliminada exitosamente.",
          icon: "success"
        });

        // Recargar la tabla después de eliminar
        //tablaventa.ajax.reload();
        window.location.href = "list.php";
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "El contrato está seguro!)",
        icon: "error"
      });
    }
  });
}


$(document).ready(function () {
  // Obtener el parámetro idcorte de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const idcontrato = urlParams.get('idcontrato');
  if (idcontrato) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/contrato.php?op=mostrar_contrato", { idcontrato: idcontrato }, function (data, status) {
        if (status === "success") {
          const response = JSON.parse(data); // Parsear datos recibidos
          console.log(response);
          if (response.contratos && response.contratos.length > 0) {
              const contrato = response.contratos[0]; // Primer corte
              let estadoContrato = contrato.estado_contrato;
              $("#idcontrato").val(contrato.idcontrato);
              $("#idpersona").val(contrato.idcliente);
              $("#fecha_hora").val(contrato.fecha_hora);
              $("#descripcion").val(contrato.descripcion);
              $("#estado_contrato").val(contrato.estado_contrato);
              $("#intereses_total").val(parseFloat(contrato.total_intereses).toFixed(2));
              $("#estado_vendedor").prop("checked", contrato.estado_vendedor == 1);
               // Mostrar u ocultar idempleado según estado_vendedor
              if (contrato.estado_vendedor == 1) {
                $("#empleado_container").show();
              } else {
                $("#empleado_container").hide();
              }
              setTimeout(function () {
                  $("#idpersona").val(contrato.idcliente).trigger('change');
                  $("#tipo_contrato").val(contrato.tipo_contrato).trigger('change');
                  $("#tipo_ingreso").val(contrato.tipo_ingreso).trigger('change');
                  $("#idempleado").val(contrato.idempleado).trigger('change');
              }, 300);

               $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
               $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Contrato');

          } else {
              console.error("No se encontraron datos para el contrato.");
          }
            // Procesar los detalles y construir las filas
            let cantidad=1;
            for (var i = 0; i < response.detalles.length; i++) {
                const detalle = response.detalles[i];
               
                subtotal = parseFloat(detalle.precio_venta * cantidad);
                stock = parseFloat(detalle.stock);
                var fila = '<tr class="filas" id="fila' + cont + '">' +
                    '<td><button type="button" class="btn btn-danger btn-flat btn-xs" onclick="eliminarDetalle(' + cont + ')"><i class="fa fa-trash"></i></button> <button type="button" class="btn btn-sm btn-dark btn-xs btn-flat" onclick="abrirModalDifunto('+detalle.iddetalle_pabellon+')"><i class="fa fa-user"></i></button></td>' +
                     '<td>' + 
                          (detalle.iddifunto > 0 
                            ? '<span class="badge badge-success" id="nombre_difunto' + detalle.iddetalle_pabellon + '">' + detalle.nombre_difunto + '</span>' 
                            : '<span class="text-muted">S/D</span>') + 
                        '</td> ' +
                    '<td> <input type="hidden" name="iddetalle_pabellon[]" value="' + detalle.iddetalle_pabellon + '">' + detalle.nombre_pabellon + '</td>' +
                    '<td><input type="text"  class="form-control" readonly name="fila[]" value="' + detalle.fila + '"></td>' +
                    '<td><input type="text"  class="form-control" readonly name="columna[]" value="' + detalle.columna + '"></td>' +
                    '<td><input type="number" class="form-control" name="cantidad[]" id="cantidad' +cont+'"  value="' + cantidad + '"  max="1" data-stock="1"></td>' +
                    '<td><input type="number" step="0.01" class="form-control" name="precio_venta[]" id="precio_venta' +cont+'" value="' + parseFloat(detalle.precio_venta).toFixed(2) + '">'+
                    '<td><input type="number" step="0.01" class="form-control" name="precio_adicional[]" id="precio_adicional' +cont+'" value="' + parseFloat(detalle.precio_adicional).toFixed(2) + '">'+
                    '<td> <span name="subtotal" id="subtotal' +cont+'" ></span></td>'
                   ;
                   
                fila += '</tr>'; // Cerrar la fila
                $('#detalles tbody').append(fila);
            
                $(`#cantidad${cont}`).on('keyup change', function () {
                  validarStock(this);
                 // modificarSubtotales();
                  });
                $(`#cantidad${cont}, #precio_venta${cont}, #precio_adicional${cont}`).on('keyup change', modificarSubtotales);
                cont++;
                modificarSubtotales();
            }

             for (var i = 0; i < response.detallepagos.length; i++) {
                const detallepago = response.detallepagos[i];

                var selectMetodo = `
                <select name="metodo_pago[]" class="form-control" required>
                  <option value="1" ${detallepago.metodo_pago == 1 ? 'selected' : ''}>Efectivo</option>
                  <option value="2" ${detallepago.metodo_pago == 2 ? 'selected' : ''}>Transferencia Empresa</option>
                  <option value="3" ${detallepago.metodo_pago == 3 ? 'selected' : ''}>Transferencia Carlos</option>
                </select>
              `;
               
                var fila = `
                          <tr class="filas" id="fila${cont}">
                            <td><button type="button" class="btn btn-danger btn-flat btn-xs" onclick="eliminarDetalle(${cont})"><i class="fa fa-trash"></i></button></td>
                            <td><input type="text" name="nro_comprobante[]" class="form-control" value="${detallepago.nrorecibo}"></td>
                            <td><input type="text" class="form-control" name="descripcion_pago[]" value="${detallepago.descripcion}"></td>
                            <td><input type="number" class="form-control" step="0.01" name="monto_pago[]" value="${parseFloat(detallepago.monto).toFixed(2)}"></td>
                            <td>${selectMetodo}</td>
                            <td><input type="date" class="form-control" name="fecha_pago[]" value="${detallepago.fecha}"></td>
                          </tr>
                        `;
                   
                fila += '</tr>'; // Cerrar la fila
                $('#detalles_cuota tbody').append(fila);
            }

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

});


init();