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

    $("#frmForm_llamada").on("submit", function(e) {
        guardar_movimiento_llamada(e);
    });
    const params = new URLSearchParams(window.location.search);
    const idcontrato = params.get("idcontrato");
    $.post("../../ajax/contrato.php?op=selectContratoPersona", function(r) {
        if ($.fn.select2 && $('#idcontrato').data('select2')) {
          $('#idcontrato').select2('destroy'); // Destruir Select2 si ya está inicializado
        }
        // Actualizar las opciones con la respuesta de AJAX
        $("#idcontrato").html('<option value="">Seleccione Servicios Contratos</option>');
        $("#idcontrato").append(r);
        // Inicializar nuevamente Select2 para el select de direcciones
        $('#idcontrato').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione Servicios Contratos',
          allowClear: true,
        });
        // Seleccionar automáticamente el contrato si existe en la URL
        if (idcontrato) {
          $('#idcontrato').val(idcontrato).trigger('change'); // Seleccionar y notificar a Select2
          
          mostrar_contrato({ preventDefault: () => {} }); // Simular `event` vacío
      }
      });

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

      $("#idpersona").on("change", function() {
        var idpersona = $("#idpersona").val(); // Obtener el ID del cliente seleccionado
      
        // Establecer el ID del cliente seleccionado directamente en el select de dirección
        $("#iddireccion").html('<option value="">Seleccione Dirección</option>');
      
        // Hacer la solicitud AJAX para cargar las direcciones del cliente
        $.post("../../ajax/cliente.php?op=selectDireccion&idpersona=" + idpersona, function(r) {
          if ($.fn.select2 && $('#iddireccion').data('select2')) {
            $('#iddireccion').select2('destroy'); // Destruir Select2 si ya está inicializado
          }
      
          // Actualizar las opciones con la respuesta de AJAX
          $("#iddireccion").append(r);
      
          // Inicializar nuevamente Select2 para el select de direcciones
          $('#iddireccion').select2({
            theme: 'bootstrap4',
            placeholder: 'Seleccione una Dirección',
            allowClear: true,
          });
        });
      });

      $.post("../../ajax/servicio.php?op=selectServicio", function(r){
        if ($.fn.select2 && $('#idservicio').data('select2')) {
          $('#idservicio').select2('destroy');
        }
      
        // Limpiar las opciones antes de agregar las nuevas
        $("#idservicio").html('<option value="">Seleccione Servicio</option>'); 
        // Actualizar el contenido del select con las opciones de producto
        $("#idservicio").append(r);
      
        // Inicializar Select2 nuevamente
        $('#idservicio').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un servicio',
          allowClear: true,
        });
      });
  
      $("#idservicio").on("change", function() {
        var idservicio = $("#idservicio").val(); // Obtener el ID del cliente seleccionado
      
        // Establecer el ID del cliente seleccionado directamente en el select de dirección
        $("#idtecnologia").html('<option value="">Seleccione Tecnologia</option>');
      
        // Hacer la solicitud AJAX para cargar las direcciones del cliente
        $.post("../../ajax/tecnologia.php?op=selectTecnologiaServicio&idservicio=" + idservicio, function(r) {
          if ($.fn.select2 && $('#idtecnologia').data('select2')) {
            $('#idtecnologia').select2('destroy'); // Destruir Select2 si ya está inicializado
          }
      
          // Actualizar las opciones con la respuesta de AJAX
          $("#idtecnologia").append(r);
      
          // Inicializar nuevamente Select2 para el select de direcciones
          $('#idtecnologia').select2({
            theme: 'bootstrap4',
            placeholder: 'Seleccione una Tecnologia',
            allowClear: true,
          });
        });
      });
  
      $("#idtecnologia").on("change", function () {
        var idtecnologia = $("#idtecnologia").val(); // Obtener el ID de la tecnología seleccionada
  
        if (idtecnologia == 1 || idtecnologia == 2) { 
          // Tecnología 1: Mostrar solo el SELECT de Plan y vaciar OLT
          $("#idolt").html('<option value="">Seleccione OLT</option>').prop('disabled', true);
          $("#idplan").html('<option value="">Seleccione un Plan</option>').prop('disabled', false);
          $("#idrepetidor").html('<option value="">Seleccione un Repetidor</option>').prop('disabled', false);
      
          // Cargar planes para la tecnología 1
          $.post("../../ajax/plan.php?op=selectPlanTecnologia&idtecnologia=" + idtecnologia, function (r) {
            if ($.fn.select2 && $('#idplan').data('select2')) {
              $('#idplan').select2('destroy');
            }
            $("#idplan").append(r);
            $('#idplan').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione un Plan',
              allowClear: true,
            });
          });
          
        } 
        else if (idtecnologia == 3) { 
          // Tecnología 3: Mostrar SELECT de OLT y deshabilitar el de Plan
          $("#idolt").html('<option value="">Seleccione OLT</option>').prop('disabled', false);
          $("#idplan").html('<option value="">Seleccione un Plan</option>').prop('disabled', true);
          $("#idrepetidor").html('<option value="">Seleccione un Repetidor</option>').prop('disabled', true);
      
          // Cargar OLTs para la tecnología 3
          $.post("../../ajax/olt.php?op=selectOltTecnologia&idtecnologia=" + idtecnologia, function (r) {
            if ($.fn.select2 && $('#idolt').data('select2')) {
              $('#idolt').select2('destroy');
            }
            $("#idolt").append(r);
            $('#idolt').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione una OLT',
              allowClear: true,
            });
          });
        }
      });
      
     
      // Evento para cargar PLAN después de seleccionar una OLT
      $("#idolt").on("change", function () {
        var idolt = $("#idolt").val();
      
        if (idolt) {
          $("#idplan").html('<option value="">Seleccione un Plan</option>').prop('disabled', false);
      
          // Cargar planes filtrados por OLT seleccionada
          $.post("../../ajax/plan.php?op=selectPlanPorOlt&idolt=" + idolt, function (r) {
            if ($.fn.select2 && $('#idplan').data('select2')) {
              $('#idplan').select2('destroy');
            }
            $("#idplan").append(r);
            $('#idplan').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione un Plan',
              allowClear: true,
            });
          });
        } else {
          // Si no hay OLT seleccionada, deshabilitar el SELECT de Plan
          $("#idplan").html('<option value="">Seleccione un Plan</option>').prop('disabled', true);
         
        }
      });
  
      // Evento cuando se selecciona un Plan
        $("#idplan").on("change", function () {
          var idplan = $("#idplan").val(); // Obtener el ID del plan seleccionado
  
          if (idplan) {
            // Hacer la solicitud AJAX para traer los datos del plan
            $.post("../../ajax/plan.php?op=obtenerDatosPlan&idplan=" + idplan, function (data) {
              var planData = JSON.parse(data); // Convertir la respuesta a JSON
              
              // Llenar los campos de descripción y mensualidad
              var mensualidad = parseFloat(planData.precio).toFixed(2);
              $("#desplan").val(planData.descripcion);
              $("#mensualidad").val(mensualidad);
              $("#upload_servicio").val(planData.upload_servicio);
              $("#download_servicio").val(planData.download_servicio);
            }).fail(function () {
              alert("Error al obtener los datos del plan. Intente nuevamente.");
            });
          } else {
            // Limpiar los inputs si no hay plan seleccionado
            $("#desplan").val('');
            $("#mensualidad").val('');
            $("#upload_servicio").val('');
            $("#download_servicio").val('');
          }
        });

       

}



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_movimiento_llamada(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_llamada")[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/contrato.php?op=guardar_movimiento_llamada",
        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("Descripcion Llamada Registrado") || datos.includes("Descripcion Llamada Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Descripcion Llamada Registrado") || datos.includes("Descripcion Llamada 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(() => {
            $("#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
  });
}


var cont = 1;
var detalles = 0;

  function mostrar_contrato(event){

    event.preventDefault();
    var idcontrato = $("#idcontrato").val();

    console.log(idcontrato);

  if (idcontrato) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/contrato.php?op=mostrar_contrato_llamada", { 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]; // Primer corte
            // Precargar los campos del formulario con valores directos
            $("#idcontrato").val(contrato.idcontrato);
            $("#estado_contrato").val(contrato.estado_contrato);
            $("#fecha_hora").val(contrato.fecha_hora);
            $("#sit_contrato").val(contrato.sit_contrato);
            $("#modalidad").val(contrato.modalidad);
            $("#nrocontrato").val(contrato.nrocontrato);
            $("#paga").val(contrato.paga);
            $("#celular").val(contrato.celular);
            $("#telefono").val(contrato.telefono);
            $("#whatsapp").val(contrato.whatsapp);
            
            //$("#mensualidad").val(contrato.montomensualidad);
            $("#tipo").val(contrato.tipo).trigger('change');
           // $("#idtitle").html('<i class="fas fa-edit"></i> Editar Contrato');
           setTimeout(function () {
            $("#idpersona").val(contrato.idcliente).trigger('change'); // Primer select
              setTimeout(function () {
              $("#iddireccion").val(contrato.iddireccion).trigger('change'); // Primer select
               }, 200);
             }, 300);
            // Precargar selects dependientes secuencialmente
            setTimeout(() => {
                $("#idservicio").val(contrato.idservicio).trigger('change'); // Segundo select dependiente
                setTimeout(() => {
                    $("#idtecnologia").val(contrato.idtecnologia).trigger('change'); // Tercer select dependiente
                    setTimeout(() => {
                        if (contrato.idtecnologia == 3) {
                            $("#idolt").val(contrato.idolt).trigger('change'); // Cargar OLT si aplica
                            setTimeout(() => {
                                $("#idplan").val(contrato.idplan).trigger('change'); // Finalmente cargar Plan
                            }, 200);
                        } else {
                            $("#idplan").val(contrato.idplan).trigger('change'); // Directamente cargar Plan
                        }
                    }, 200); // Asegurar que tecnología cargó antes
                }, 200); // Asegurar que servicio cargó antes
            }, 300); // Asegurar que cliente cargó antes


          }else{
            console.error("No se encontraron datos para el contrato.");
          }

          if (response.llamadas && response.llamadas.length > 0) {
            // Verifica si DataTable ya está inicializado y destrúyelo
            if ($.fn.DataTable.isDataTable("#detallellamada")) {
                $("#detallellamada").DataTable().clear().destroy();
            }
        
            $("#detallellamada tbody").empty(); // Limpia las filas anteriores
        
            for (var i = 0; i < response.llamadas.length; i++) {
                const llamada = response.llamadas[i];
        
                let fila = '<tr class="filas" id="fila' + cont + '">' +
                           '<td style="font-size: 14px;"> <input type="hidden">' + llamada.created_at + '</td>' +
                           '<td style="font-size: 14px;"> <input type="hidden">' + llamada.usuario + '</td>' +
                           '<td style="font-size: 14px;"> <input type="hidden">' + llamada.descripcion + '</td>' +
                           '</tr>'; // Cerrar la fila
                $('#detallellamada tbody').append(fila);
        
                // Incrementar el contador de filas
                cont++;
                detalles = detalles + 1;
            }
        
            $('#detallellamada').DataTable({
                destroy: true, // Destruir instancia previa para reinicializar
                paging: true, // Activar paginación
                searching: true, // Activar buscador
                lengthChange: true, // Permitir cambiar número de filas visibles
                info: true, // Mostrar información sobre los datos
                language: {
                    url: "https://cdn.datatables.net/plug-ins/1.13.6/i18n/es-ES.json" // Español
                }
            });
        } else {
            // Si no hay registros en llamadas, limpia la tabla
            if ($.fn.DataTable.isDataTable("#detallellamada")) {
                $("#detallellamada").DataTable().clear().destroy();
            }
        
            $("#detallellamada tbody").empty(); // Limpia las filas anteriores
        }
        }
    });
  }

  }



init();