import { ready } from './ready';

/**
 * Initialises all countdown fields on the page.
 */
ready(() => {
  const lang = document.documentElement.getAttribute('lang');

  const rtf = new Intl.RelativeTimeFormat(lang ?? [], { numeric: 'auto' });

  const timeFrames = [
    [60 * 60 * 24 * 365, 'year'],
    [60 * 60 * 24 * 30, 'month'],
    [60 * 60 * 24 * 7, 'week'],
    [60 * 60 * 24, 'day'],
    [60 * 60, 'hour'],
    [60, 'minute'],
    [1, 'second'],
  ];

  /**
   * @param {number} timestamp
   * @returns {string}
   */
  function formatFromNow(timestamp) {
    const now = Date.now() / 1000;
    const diff = Math.round(timestamp - now);
    const absValue = Math.abs(diff);

    for (const [duration, unit] of timeFrames) {
      if (absValue >= duration) {
        return rtf.format(Math.round(diff / duration), unit);
      }
    }

    return rtf.format(0, 'second');
  }

  document.querySelectorAll('[data-countdown-ts]').forEach((element) => {
    const timestamp = Number(element.dataset.countdownTs);
    const template = element.textContent;
    element.textContent = template.replace('%c', formatFromNow(timestamp));
    setInterval(() => {
      element.textContent = template.replace('%c', formatFromNow(timestamp));
    }, 1000);
  });
});