// Copyright 2018 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.RelativeTimeFormat.prototype.format
description: Checks the behavior of Intl.RelativeTimeFormat.prototype.format() in English.
features: [Intl.RelativeTimeFormat]
locale: [en-US]
---*/

const units = [
  "second",
  "minute",
  "hour",
  "day",
  "week",
  "month",
  "quarter",
  "year",
];

const rtf = new Intl.RelativeTimeFormat("en-US", { "numeric": "auto" });

assert.sameValue(typeof rtf.format, "function", "format should be supported");

// https://www.unicode.org/cldr/charts/33/summary/en.html#1530
const exceptions = {
  "year": {
    "-1": "last year",
    "0": "this year",
    "1": "next year",
  },
  "quarter": {
    "-1": "last quarter",
    "0": "this quarter",
    "1": "next quarter",
  },
  "month": {
    "-1": "last month",
    "0": "this month",
    "1": "next month",
  },
  "week": {
    "-1": "last week",
    "0": "this week",
    "1": "next week",
  },
  "day": {
    "-1": "yesterday",
    "0": "today",
    "1": "tomorrow",
  },
  "hour": {
    "-1": "1 hour ago",
    '0': 'this hour',
    "1": "in 1 hour",
  },
  "minute": {
    "-1": "1 minute ago",
    '0': 'this minute',
    "1": "in 1 minute",
  },
  "second": {
    "-1": "1 second ago",
    "0": "now",
    "1": "in 1 second",
  },
};

for (const unit of units) {
  const expected = unit in exceptions
    ? [exceptions[unit]["1"], exceptions[unit]["0"], exceptions[unit]["0"], exceptions[unit]["-1"]]
    : [`in 1 ${unit}`, `in 0 ${unit}s`, `0 ${unit}s ago`, `1 ${unit} ago`];

  assert.sameValue(rtf.format(1000, unit), `in 1,000 ${unit}s`);
  assert.sameValue(rtf.format(10, unit), `in 10 ${unit}s`);
  assert.sameValue(rtf.format(2, unit), `in 2 ${unit}s`);
  assert.sameValue(rtf.format(1, unit), expected[0]);
  assert.sameValue(rtf.format(0, unit), expected[1]);
  assert.sameValue(rtf.format(-0, unit), expected[2]);
  assert.sameValue(rtf.format(-1, unit), expected[3]);
  assert.sameValue(rtf.format(-2, unit), `2 ${unit}s ago`);
  assert.sameValue(rtf.format(-10, unit), `10 ${unit}s ago`);
  assert.sameValue(rtf.format(-1000, unit), `1,000 ${unit}s ago`);
}

reportCompare(0, 0);
