// adapted from https://unpkg.com/timeago.js@4.0.0-beta.1/lib/index.js
/**
 * Created by hustcc on 18/5/20.
 * Contract: i@hust.cc
 */

var IndexMapEn = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year']
var SEC_ARRAY = [60, 60, 24, 7, 365 / 7 / 12, 12]

/**
 * Created by hustcc on 18/5/20.
 * Contract: i@hust.cc
 */

function en (number, index) {
  if (index === 0) {
    return ['just now', 'right now']
  }
  var unit = IndexMapEn[Math.floor(index / 2)]
  if (number > 1) {
    unit += 's'
  }
  return [number + ' ' + unit + ' ago', 'in ' + number + ' ' + unit]
}

/**
 * Created by hustcc on 18/5/20.
 * Contract: i@hust.cc
 */

/**
 * format the diff second to *** time ago, with setting locale
 * @param diff
 * @param locale
 * @param defaultLocale
 * @returns {string | void | *}
 */
function formatDiff (diff) {
  // if locale is not exist, use defaultLocale.
  // if defaultLocale is not exist, use build-in `en`.
  // be sure of no error when locale is not exist.
  var i = 0

  var agoin = diff < 0 ? 1 : 0

  // timein or timeago

  var totalSec = diff = Math.abs(diff)

  for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {
    diff /= SEC_ARRAY[i]
  }
  diff = Math.floor(diff)
  i *= 2

  if (diff > (i === 0 ? 9 : 1)) i += 1
  return en(diff, i, totalSec)[agoin].replace('%s', diff)
}

/**
 * calculate the diff second between date to be formatted an now date.
 * @param date
 * @param nowDate
 * @returns {number}
 */
function diffSec (date, now) {
  return (now - date) / 1000
}

/**
 * Created by hustcc on 18/5/20.
 * Contract: i@hust.cc
 */
export function format (date, now) {
  return formatDiff(diffSec(date, now))
}
