export { initTooltip, openTooltip, closeTooltip, toggleTooltip, initTooltipStorybook };

const TOOLTIP_HIDDEN = 'ds-tooltip--hidden';

let setupTooltipClickListener = true;

function initTooltip(tooltipEl) {
  const tooltipsClosingOnOutsideClick = document.getElementsByClassName('ds-tooltip--close-outside-click');

  if (setupTooltipClickListener && tooltipsClosingOnOutsideClick.length > 0) {
    setupTooltipClickListener = false;

    document.addEventListener('click', (e) => {
      const tooltipClick = e.target.closest('.ds-tooltip');
      if (tooltipClick) return;

      const tooltipsToClose = document.getElementsByClassName('ds-tooltip--close-outside-click');
      for (const tooltip of tooltipsToClose) {
        closeTooltip(tooltip);
      }
    });
  }

  const closeButtons = Array.from(tooltipEl.getElementsByClassName('ds-tooltip__close'));
  closeButtons.forEach((button) => {
    button.addEventListener('click', () => {
      closeTooltip(tooltipEl);
    });
  });
}

function toggleTooltip(tooltipEl, force) {
  tooltipEl.classList.toggle(TOOLTIP_HIDDEN, !force);
  return !tooltipEl.classList.contains(TOOLTIP_HIDDEN);
}

function openTooltip(tooltipEl) {
  tooltipEl.classList.remove(TOOLTIP_HIDDEN);
  return true;
}

function closeTooltip(tooltipEl) {
  tooltipEl.classList.add(TOOLTIP_HIDDEN);
  return false;
}

function initTooltipStorybook() {
  const tooltips = Array.from(document.getElementsByClassName('ds-tooltip'));
  tooltips.forEach((tooltipEl) => {
    initTooltip(tooltipEl);
    openTooltip(tooltipEl);
  });
}
