const _cache = {};

export function applyInlineOneboxes(inline, ajax, opts) {
  opts = opts || {};

  const urls = Object.keys(inline).filter((url) => !_cache[url]);

  urls.forEach((url) => {
    // cache a blank locally, so we never trigger a lookup
    _cache[url] = {};
  });

  if (urls.length === 0) {
    return;
  }

  ajax("/inline-onebox", {
    data: {
      urls,
      category_id: opts.categoryId,
      topic_id: opts.topicId,
    },
  }).then((result) => {
    result["inline-oneboxes"].forEach((onebox) => {
      if (onebox.title) {
        _cache[onebox.url] = onebox;

        let links = inline[onebox.url] || [];
        links.forEach((link) => {
          link.innerText = onebox.title;
          link.classList.add("inline-onebox");
          link.classList.remove("inline-onebox-loading");
        });
      }
    });
  });
}

export function cachedInlineOnebox(url) {
  return _cache[url];
}

export function applyCachedInlineOnebox(url, onebox) {
  return (_cache[url] = onebox);
}

export function deleteCachedInlineOnebox(url) {
  return delete _cache[url];
}