import { useIntl } from 'react-intl';

/**
 * Retrieve the estimated reading time by words count.
 *
 * @param {number} wordsCount - The number of words.
 * @returns {string} The estimated reading time.
 */
export const useReadingTime = (
  wordsCount: number,
  onlyMinutes: boolean = false
): string => {
  const intl = useIntl();
  const wordsPerMinute = 245;
  const wordsPerSecond = wordsPerMinute / 60;
  const estimatedTimeInSeconds = wordsCount / wordsPerSecond;

  if (onlyMinutes) {
    const estimatedTimeInMinutes = Math.round(estimatedTimeInSeconds / 60);

    return intl.formatMessage(
      {
        defaultMessage: '{minutesCount} minutes',
        description: 'useReadingTime: rounded minutes count',
        id: 's1i43J',
      },
      { minutesCount: estimatedTimeInMinutes }
    );
  } else {
    const estimatedTimeInMinutes = Math.floor(estimatedTimeInSeconds / 60);

    if (estimatedTimeInMinutes <= 0) {
      return intl.formatMessage(
        {
          defaultMessage: '{count} seconds',
          description: 'useReadingTime: seconds count',
          id: 'i7Wq3G',
        },
        { count: estimatedTimeInSeconds.toFixed(0) }
      );
    }

    const remainingSeconds = Math.round(
      estimatedTimeInSeconds - estimatedTimeInMinutes * 60
    ).toFixed(0);

    return intl.formatMessage(
      {
        defaultMessage: '{minutesCount} minutes {secondsCount} seconds',
        description: 'useReadingTime: minutes + seconds count',
        id: 'OevMeU',
      },
      { minutesCount: estimatedTimeInMinutes, secondsCount: remainingSeconds }
    );
  }
};
