import { isAfter, isBefore, subDays } from 'date-fns';
import { getBrowserLocale } from '../shared';

function getStartOfToday() {
  const now = new Date();
  return new Date(now.getFullYear(), now.getMonth(), now.getDate());
}

export const getConversationItemString = (date: Date) => {
  const now = new Date();

  // if this is in the future, or older than 7 days ago we display date+time
  if (isAfter(date, now) || isBefore(date, subDays(now, 7))) {
    const formatter = new Intl.DateTimeFormat(getBrowserLocale(), {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
      hour: 'numeric',
      minute: 'numeric',
      hour12: undefined, // am/pm depending on the locale
    });
    return formatter.format(date);
  }

  // if it is today, display the hour and minutes only, am/pm locale dependent
  if (isAfter(date, getStartOfToday())) {
    const formatter = new Intl.DateTimeFormat(getBrowserLocale(), {
      hour: 'numeric',
      minute: 'numeric',
      hour12: undefined, // am/pm depending on the locale
    });
    return formatter.format(date);
  }
  // less than 7 days ago, display the day of the week + time
  const formatter = new Intl.DateTimeFormat(getBrowserLocale(), {
    weekday: 'short',
    hour: 'numeric',
    minute: 'numeric',
    hour12: undefined, // am/pm depending on the locale
  });
  return formatter.format(date);
};
