
const observerOptions = {
  root: null, // Observa en relación al viewport
  threshold: 0,
  rootMargin: "0px 0px 150px 0px" 
};

/**
 * Callback que se ejecuta cuando un elemento observado entra
 * o sale del área de observación.
 */
const lazyLoadCallback = (entries, observer) => {
  entries.forEach(entry => {
    // Comprueba si el elemento está ahora visible (o a punto de estarlo)
    if (entry.isIntersecting) {
      const element = entry.target;
      const imageElement = document.createElement('img');
      const imageUrl = element.dataset.src;

      if (imageUrl) {
        imageElement.onload = () => {
            // Asigna la imagen de fondo. Aquí es donde el navegador la descarga.
            element.style.backgroundImage = `url('${imageUrl}')`;
        }
        imageElement.onerror = () => {
            element.style.backgroundImage = `url('/express/assets/no_image.png')`;
        };
        // (Opcional) Añade una clase para animar la aparición
        element.classList.add('bg-loaded');

        imageElement.src = imageUrl;
        observer.unobserve(element);
    }
    }

            
  });
};

// Crea la instancia del observer
export const imageObserver = new IntersectionObserver(lazyLoadCallback, observerOptions);