var tabla;
var tabla_averia;
function init(){
    listar();
    listartecnico();
    listardetalle();

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

    $("#chatForm").on("submit", function(e) {
      guardarChat(e); // Llamar a la función para procesar el formulario
    });

    $("#ImagenFormContrato").on("submit", function(e) {
      guardarImagen(e); // Llamar a la función para procesar el formulario
    });

    $("#ImagenFormAveria").on("submit", function(e) {
      guardarImagenAveria(e); // Llamar a la función para procesar el formulario
    });

    $("#calificarForm").on("submit", function(e) {
      guardarCalificar(e); // Llamar a la función para procesar el formulario
    });

        $("#imagenmuestra1").hide();
        $("#imagenmuestra2").hide();
        $("#imagenmuestra3").hide();
        $("#imagenmuestra4").hide();
        $("#imagenmuestra5").hide();
        $("#imagenmuestra6").hide();
        $("#imagenmuestra7").hide();
        $("#imagenmuestra8").hide();


       let esEdicion = false;
        const params = new URLSearchParams(window.location.search);

        const idincidencia = params.get("idincidencia");
        const idpersona = params.get("idpersona");
        const idcontrato = params.get("idcontrato");
        const detalle_problema = params.get("descripcion");
        const direccion = params.get("direccion");
        const referencia = params.get("referencia");
        const latitud = params.get("latitud");
        const longitud = params.get("longitud");
        const celular = params.get("celular");
        const estado_contrato = params.get("sit_contrato");
        

        // Prellenar campos si los valores vienen por la URL
        if (detalle_problema) {
          $("#detalle_problema").val(decodeURIComponent(detalle_problema));
        }
        if (idincidencia) {
          $("#idincidencia").val(decodeURIComponent(idincidencia));
        }
        if (direccion) {
          $("#direccion").val(decodeURIComponent(direccion));
        }
        if (referencia) {
          $("#referencia").val(decodeURIComponent(referencia));
        }
        if (latitud) {
          $("#latitud").val(decodeURIComponent(latitud));
        }
        if (longitud) {
          $("#longitud").val(decodeURIComponent(longitud));
        }
        if (celular) {
          $("#celular1").val(decodeURIComponent(celular));
        }
        if (estado_contrato) {
          $("#sit_contrato").val(decodeURIComponent(estado_contrato));
        }

         // Si viene idcontrato, establecer bandera de edición
        if (idcontrato) {
          esEdicion = true;
        }

        

        $.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,
            });
            if (idpersona) {
              $('#idpersona').val(idpersona).trigger('change'); // Seleccionar y notificar a Select2
          }
        });

        $("#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
          $("#idcontrato").html('<option value="">Seleccione Servicios Contratos</option>');
          // Hacer la solicitud AJAX para cargar las direcciones del cliente
          $.post("../../ajax/contrato.php?op=selectContrato&idpersona=" + idpersona, 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,
            });
            if (idcontrato) {
              $('#idcontrato').val(idcontrato).trigger('change'); // Seleccionar y notificar a Select2
          }
          });
        });

        // Evento cuando se selecciona un servicio contratados
        $("#idcontrato").on("change", function () {
          var idcontrato = $("#idcontrato").val(); // Obtener el ID del plan seleccionado

          // Si es edición, no ejecutar la consulta y desactivar bandera
          if (esEdicion) {
            esEdicion = false;
            return;
          }

          if (idcontrato) {
            // Hacer la solicitud AJAX para traer los datos del plan
            $.post("../../ajax/contrato.php?op=obtenerDatosContrato&idcontrato=" + idcontrato, function (data) {
              var planContrato = JSON.parse(data); // Convertir la respuesta a JSON
              
              // Llenar los campos de descripción y mensualidad
              $("#direccion").val(planContrato.address);
              $("#tecnologia").val(planContrato.idtecnologia);
              $("#iddireccion").val(planContrato.iddireccion);
              $("#referencia").val(planContrato.description);
              $("#sit_contrato").val(planContrato.sit_contrato);
              $("#celular1").val(planContrato.celular);
              $("#celular2").val(planContrato.whatsapp);
              $("#distrito").val(planContrato.distrito);
            }).fail(function () {
              alert("Error al obtener los datos del plan. Intente nuevamente.");
            });
          } else {
            // Limpiar los inputs si no hay plan seleccionado
              $("#direccion").val("");
              $("#referencia").val("");
              $("#sit_contrato").val("");
              $("#celular1").val("");
              $("#celular2").val("");
              $("#distrito").val("");
          }
        });


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

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


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

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

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

function imagen(idaveria) {
  // Asigna el valor de idaveria al input oculto en el modal
  $('#idaveriac').val(idaveria);
  $('#idaveriacc').val(idaveria);
  //console.log(idaveria);
}

function calificar(idaveria) {
  // Asigna el valor de idaveria al input oculto en el modal
  $('#idaveria').val(idaveria);
  //console.log(idaveria);
}

//Función limpiar
function limpiar()
{
	$("#idaveria").val("");
	$("#idcliente").val("");
	$("#direccion").val("");
	$("#referencia").val("");
	$("#distrito").val("");
	$("#celular1").val("");
	$("#celular2").val("");
	$("#detalle_problema").val("");
	$("#observacion").val("");
	$("#imagenactual").val("");
	$("#imagen").val("");
}
// Función para listar datos
function listar() {
      var idcategoria_ingreso = $("#idcategoria_ingreso").val();
      var idcuadrilla = $("#idcuadrilla").val();

      // Validación: Solo uno puede ser seleccionado
      if (idcategoria_ingreso && idcuadrilla) {
        //alert("Debe seleccionar solo una opción: Categoría o Cuadrilla, no ambas.");
        //return;
        Swal.fire({
          icon: 'error',
          title: 'Seleccionar solo una opcion',
          text: `Categoría o Cuadrilla, no ambas.`,
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      return;
    }

      // Definir los parámetros dinámicamente
      var params = {};
      if (idcategoria_ingreso) {
          params.idcategoria_ingreso = idcategoria_ingreso;
      }
      if (idcuadrilla) {
          params.idcuadrilla = idcuadrilla;
      }
    
   tabla_averia =$("#producto").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/averia.php?op=listaraveria',
            data: params, // Se envía solo si tiene valor
            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)
    });
   // Llamar a cantidadPuntos solo si idcuadrilla está seleccionado
   if (idcuadrilla) {
    $.post("../../ajax/averia.php?op=cantidadPuntos", { idcuadrilla: idcuadrilla }, function(data, status) {
        data = JSON.parse(data);
        $("#puntuacion").text(data.punto ? parseFloat(data.punto) : "0");
    });
}
}

function listartecnico() {
  tabla=$("#producto_tecnico").DataTable({
      "responsive": true,
      "autoWidth": false,
      "ajax": {
          url: '../../ajax/averia.php?op=listartecnico',
          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 listardetalle() {
  tabla=$("#detalles_averia").DataTable({
      "responsive": true,
      "autoWidth": false,
      "ajax": {
          url: '../../ajax/averia.php?op=listardetalle',
          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 guardarChat(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnChat").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#chatForm")[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/averia.php?op=guardarChat",
        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("Chat Registrado") || datos.includes("Chat Actualizar") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Chat Registrado") || datos.includes("Chat Actualizar")) {
              // 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 = "list.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(() => {
            $("#btnChat").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(() => {
        $("#btnChat").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnChat").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

// Función para guardar o editar
function guardarImagen(e) {
  e.preventDefault();
  $("#btnImagen").prop("disabled", true);
  var formData = new FormData($("#ImagenFormContrato")[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) {

      // Mostrar precarga inmediatamente
      Swal.fire({
        title: "Subiendo imagen...",
        html: "Por favor, espera mientras se guarda la imagen.",
        allowOutsideClick: false,
        didOpen: () => {
          Swal.showLoading();
        }
      });

      $.ajax({
        url: "../../ajax/averia.php?op=guardarImagen",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (respuesta) {
          try {
            var datos = JSON.parse(respuesta);

            if (datos.status === "success") {
              // Cerrar la precarga anterior y mostrar una confirmación antes de redirigir
              Swal.fire({
                icon: "success",
                title: "Imagen guardada",
                text: "Se ha guardado correctamente.",
                timer: 2000,
                timerProgressBar: true,
                willClose: () => {
                  $(location).attr("href", "../averia/list.php");
                }
              });
            } else {
              Swal.fire({
                icon: "error",
                title: "Error",
                text: datos.message,
                timer: 3000,
                timerProgressBar: true,
                allowOutsideClick: false,
                willClose: () => {
                  $("#btnImagen").prop("disabled", false);
                }
              });
            }
          } catch (error) {
            console.error("Error parsing JSON:", error);
            Swal.fire({
              icon: "error",
              title: "Error de respuesta",
              text: "Respuesta inesperada del servidor.",
              confirmButtonText: "Aceptar"
            });
            $("#btnImagen").prop("disabled", false);
          }
        },
        error: function () {
          Swal.fire({
            icon: "error",
            title: "Error",
            text: "Hubo un problema con la solicitud. Intente nuevamente.",
            confirmButtonText: "Aceptar"
          });
          $("#btnImagen").prop("disabled", false);
        }
      });
    } else {
      $("#btnImagen").prop("disabled", false);
    }
  });
}

function guardarImagenAveria(e) {
  e.preventDefault();
  $("#btnImagen").prop("disabled", true);
  var formData = new FormData($("#ImagenFormAveria")[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) {

      // Mostrar precarga antes de enviar la solicitud
      Swal.fire({
        title: "Subiendo imagen...",
        html: "Por favor, espera mientras se guarda la imagen.",
        allowOutsideClick: false,
        backdrop: true,
        didOpen: () => {
          Swal.showLoading();
        }
      });

      $.ajax({
        url: "../../ajax/averia.php?op=guardarImagenAveria",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (response) {
          try {
            let datos = JSON.parse(response);

            if (datos.status === "success") {
              Swal.fire({
                icon: "success",
                title: "Imagen guardada",
                html: "Redirigiendo...",
                timer: 2000,
                timerProgressBar: true,
                allowOutsideClick: false,
                didOpen: () => {
                  Swal.showLoading();
                },
                willClose: () => {
                  $(location).attr("href", "../averia/list.php");
                }
              });
            } else {
              Swal.fire({
                position: 'center',
                title: "Error",
                html: datos.message + "<br>Cerrando en <b></b> ms.",
                icon: "error",
                timer: 2000,
                timerProgressBar: true,
                allowOutsideClick: false,
                didOpen: () => {
                  Swal.showLoading();
                  const timer = Swal.getPopup().querySelector("b");
                  let timerInterval = setInterval(() => {
                    timer.textContent = `${Swal.getTimerLeft()}`;
                  }, 100);
                },
                willClose: () => {
                  $("#btnImagen").prop("disabled", false);
                }
              });
            }
          } catch (error) {
            Swal.fire({
              title: "Error",
              text: "Hubo un problema con la respuesta del servidor.",
              icon: "error",
              confirmButtonText: "Aceptar"
            }).then(() => {
              $("#btnImagen").prop("disabled", false);
            });
          }
        },
        error: function () {
          Swal.fire({
            title: "Error",
            text: "Hubo un problema con la solicitud. Intente nuevamente.",
            icon: "error",
            confirmButtonText: "Aceptar"
          }).then(() => {
            $("#btnImagen").prop("disabled", false);
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnImagen").prop("disabled", false);
      });
    }
  });
}

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

  // Configuración de alerta de confirmación
  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) {
      // Mostrar alerta de carga con spinner
      

      // Realizar la solicitud AJAX
      $.ajax({
        url: "../../ajax/averia.php?op=guardarCalificar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Solo cerrar la alerta de carga una vez que la solicitud haya terminado
        
        if (datos.includes("Calificacion Registrado") || datos.includes("Calificacion Actualizar")) {
          let timerInterval;
          Swal.fire({
            title: "Guardando...",
            html: "Por favor, espera mientras se procesan los datos.",
            timer: 5000, // 10 segundos de espera
            timerProgressBar: true,
            allowOutsideClick: false, // Desactiva interacciones externas
            backdrop: false, // Elimina el fondo para evitar el cambio en la altura de la página
            didOpen: () => {
              Swal.showLoading(); // Mostrar spinner de carga
            },
            willClose: () => {
              clearInterval(timerInterval); // Limpiar interval cuando la alerta se cierre
              $(location).attr("href", "../averia/list.php");
            }
          });
        }else{
          let timerInterval;
          Swal.fire({
              position: 'center',
              title: "Error",
              html: "Imagenes no pudieron ser procesadas.<br>Cerrando en <b></b> ms.",
              icon: "error",
              timer: 2000,
              timerProgressBar: true,
              allowOutsideClick: false, // Desactiva interacciones externas
              backdrop: false, // Elimina el fondo para evitar el cambio en la altura de la página
              customClass: {
                  popup: 'no-margin-swal', // Clase personalizada para ajustar márgenes
              },
              didOpen: () => {
                  Swal.showLoading();
                  const timer = Swal.getPopup().querySelector("b");
                  timerInterval = setInterval(() => {
                      timer.textContent = `${Swal.getTimerLeft()}`;
                  }, 100);
              },
              willClose: () => {
                $(location).attr("href", "../averia/list.php");
              }
          });
        }
        },
        error: function () {
          // Manejar errores en la solicitud AJAX
          Swal.close();
          swalWithBootstrapButtons.fire({
            title: "Error",
            text: "Hubo un problema con la solicitud. Intente nuevamente.",
            icon: "error",
            confirmButtonText: "Aceptar"
          }).then(() => {
            $("#btnCalificar").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(() => {
        $("#btnCalificar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  });
}
// 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/averia.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("Averia Registrado") || datos.includes("Averia Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Averia Registrado") || datos.includes("Averia 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(idaveria) {
  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/averia.php?op=eliminar", { idaveria: idaveria }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "La averia ha sido eliminada exitosamente.",
          icon: "success"
        });

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

    function mostrarchat(idaveria){   
      var idingreso = idaveria;  
      $('#idaveria1').val(idaveria);
     // console.log(idaveria);
      $.ajax({  
      url:"../../ajax/averia.php?op=mostrarchat&id=" + idaveria,  
      method:"POST",  
      data:{idaveria:idaveria},  
      dataType:"json",  
      success:function(response){  
        console.log(response);                 
    
      var cont=0;                  
        var html="<table class='table table-striped table-bordered table-condensed table-hover'>";
        html+="<thead>";
        html+="<tr style='background-color:#050505'>";
        html+="<th style='background-color:#050505; color: white;'>Fecha </th>";
        html+="<th style='background-color:#050505; color: white;'>Descripcion</th>";                
        html+="<th style='background-color:#050505; color: white;'>Responsable</th> </tr></thead>";

        html+="<tbody>";              

        for (i = 0; i < response.chats.length; i++) {             
            html += '<tr>' +
        //'<tr>'+
          '<td>' + response.chats[i].fecharegistro + '</td>' +
          '<td>' + response.chats[i].descripcion + '</td>' +
          '<td>' + response.chats[i].nombre + '</td>' +                               
          '</tr>' ;
          }
      
          html+="</tbody>";
          html+="</table>";                 
          document.getElementById("tblarticuloss").innerHTML=html;              
                      
      } 

  }); 
}

function alertarCliente(cliente) {
  Swal.fire({
      icon: 'info',
      title: 'Ficha de Cliente Registrada',
      text: `Cliente: ${cliente}`,
      confirmButtonText: 'Aceptar'
  });
}

$(document).ready(function () {
  const urlParams = new URLSearchParams(window.location.search);
  const idaveria = urlParams.get('idaveria');

  if (!idaveria) return;

  // Función para precargar un campo simple
  function preloadInput(selector, value) {
    $(selector).val(value);
  }

  // Función para precargar un campo select2 con trigger
  function preloadSelect(selector, value, delay = 0) {
    setTimeout(() => {
      $(selector).val(value).trigger('change');
    }, delay);
  }

  // Llamada al backend para obtener datos
  $.post("../../ajax/averia.php?op=mostrar_trabajo_averia", { idaveria }, function (data, status) {
    if (status !== "success") {
      console.error("Error al obtener datos de avería.");
      return;
    }

    const response = JSON.parse(data);
    const averia = response.averias?.[0];

    if (!averia) {
      console.error("No se encontraron datos de avería.");
      return;
    }

    // Precargar inputs simples
    preloadInput("#idaveria", averia.idaveria);
    //preloadInput("#direccion",averia.direccion);

    preloadInput("#detalle_problema", averia.detalle_problema);
    preloadInput("#observacion", averia.observaciones);
    preloadInput("#title1", averia.title);
    preloadInput("#color1", averia.color);
    preloadInput("#start1", averia.start);
    preloadInput("#end1", averia.end);

    // Precargar selects relacionados (con dependencia)
    preloadSelect("#idpersona", averia.idcliente, 100);
    preloadSelect("#idcontrato", averia.idcontrato, 400);

    preloadSelect("#idcategoria_ingreso", averia.idcategoria, 100);
    preloadSelect("#idconcepto_ingreso", averia.idtrabajo, 400);

    // Otros selects
    preloadSelect("#prioridad", averia.prioridad, 300);
    preloadSelect("#idtecnico", averia.idtecnico, 300);
    preloadSelect("#estado", averia.estado_averia, 300);

    // Cambiar el texto de botones y encabezados
    $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
    $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Avería');
  });
});

function abrirWaze(destLat, destLon) {
  // Verifica si el navegador soporta geolocalización
  if (!navigator.geolocation) {
      alert("Tu navegador no soporta geolocalización.");
      return;
  }

  // Pregunta primero si el usuario tiene la ubicación activada
  navigator.geolocation.getCurrentPosition(
      function (position) {
          // Captura la ubicación actual del usuario
          let userLat = position.coords.latitude;
          let userLon = position.coords.longitude;

          // URL de Waze con la ubicación actual como punto de partida
          let url = `https://waze.com/ul?ll=${destLat},${destLon}&navigate=yes&from=${userLat},${userLon}`;
          
          window.open(url, "_blank"); // Abre en una nueva pestaña
      },
      function (error) {
          // Si la ubicación está desactivada o el usuario la deniega
          if (error.code === error.PERMISSION_DENIED) {
              let activarUbicacion = confirm("⚠️ La ubicación está desactivada. ¿Quieres activarla?");
              if (activarUbicacion) {
                  // Redirige a la configuración de ubicación del móvil
                  window.location.href = "intent://settings#Intent;scheme=android.settings.LOCATION_SOURCE_SETTINGS;end;";
              }
          } else {
              let abrirSinRuta = confirm("⚠️ No se pudo obtener tu ubicación. ¿Abrir Waze sin ruta?");
             // if (abrirSinRuta) {
             //     let url = `https://waze.com/ul?ll=${destLat},${destLon}`;
             //     window.open(url, "_blank");
             // }
          }
      }
  );
}






init();