"use strict";



//  P R O G R A M

const relativeDate = (undefined => {
  const SECOND = 1000;
  const MINUTE = 60 * SECOND;
  const HOUR = 60 * MINUTE;
  const DAY = 24 * HOUR;
  const WEEK = 7 * DAY;
  const YEAR = DAY * 365;
  const MONTH = YEAR / 12;

  const formats = [
    [ 0.7 * MINUTE, "just now" ],
    [ 1.5 * MINUTE, "a minute ago" ],
    [ 60 * MINUTE, "minutes ago", MINUTE ],
    [ 1.5 * HOUR, "an hour ago" ],
    [ DAY, "hours ago", HOUR ],
    [ 2 * DAY, "yesterday" ],
    [ 7 * DAY, "days ago", DAY ],
    [ 1.5 * WEEK, "a week ago" ],
    [ MONTH, "weeks ago", WEEK ],
    [ 1.5 * MONTH, "a month ago" ],
    [ YEAR, "months ago", MONTH ],
    [ 1.5 * YEAR, "a year ago" ],
    [ Number.MAX_VALUE, "years ago", YEAR ]
  ];

  function relativeDate(input, reference) {
    !reference && (reference = (new Date).getTime());
    reference instanceof Date && (reference = reference.getTime());
    input instanceof Date && (input = input.getTime());

    const delta = reference - input;
    const len = formats.length;

    for (let i = -1; ++i < len;) {
      const format = formats[i];

      if (delta < format[0]) {
        return format[2] === undefined ? format[1] : Math.round(delta / format[2]) + " " + format[1];
      }
    }
  }

  return relativeDate;
})();



//  E X P O R T

if (typeof module !== "undefined" && module.exports) {
  module.exports = exports = relativeDate;
}