const refreshFsLightbox = () => {
  if (typeof window.requestFsLightboxRefresh === 'function') {
    return window.requestFsLightboxRefresh();
  }
  if (typeof window.refreshFsLightbox === 'function') {
    window.refreshFsLightbox();
    window.__fsLightboxRefreshPending = false;
    return true;
  }
  window.__fsLightboxRefreshPending = true;
  return false;
};

let refreshTimer = null;
const scheduleRefresh = () => {
  if (refreshTimer) {return;}
  refreshTimer = window.setTimeout(() => {
    refreshTimer = null;
    refreshFsLightbox();
  }, 30);
};

const initObserver = () => {
  if (!document.body || typeof MutationObserver === 'undefined') {
    return;
  }
  const observer = new MutationObserver((mutations) => {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        if (!(node instanceof HTMLElement)) {continue;}
        if (node.matches?.('[data-fslightbox]') || node.querySelector?.('[data-fslightbox]')) {
          scheduleRefresh();
          return;
        }
      }
    }
  });
  observer.observe(document.body, { childList: true, subtree: true });
};

if (!refreshFsLightbox()) {
  scheduleRefresh();
}

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', () => {
    refreshFsLightbox();
    initObserver();
  });
} else {
  refreshFsLightbox();
  initObserver();
}

if (window.__fsLightboxRefreshPending && typeof window.refreshFsLightbox === 'function') {
  refreshFsLightbox();
}
