"use strict";
exports.assertType = assertType;
exports.fakeDate = fakeDate;
exports.generateOffset = generateOffset;
exports.resetDefaultOptions = resetDefaultOptions;
var _vitest = require("./test/vitest");
var _index = require("./addLeadingZeros.cjs");
var _index2 = require("./defaultOptions.cjs");

function assertType(_value) {}

function resetDefaultOptions() {
  (0, _index2.setDefaultOptions)({});
}

// This makes sure we create the consistent offsets across timezones, no matter where these tests are ran.
function generateOffset(originalDate) {
  // Add the timezone.
  let offset = "";
  const tzOffset = originalDate.getTimezoneOffset();

  if (tzOffset !== 0) {
    const absoluteOffset = Math.abs(tzOffset);
    const hourOffset = (0, _index.addLeadingZeros)(
      Math.trunc(absoluteOffset / 60),
      2,
    );
    const minuteOffset = (0, _index.addLeadingZeros)(absoluteOffset % 60, 2);
    // If less than 0, the sign is +, because it is ahead of time.
    const sign = tzOffset < 0 ? "+" : "-";

    offset = `${sign}${hourOffset}:${minuteOffset}`;
  } else {
    offset = "Z";
  }

  return offset;
}

function fakeDate(date) {
  function fakeNow(date) {
    _vitest.vi.setSystemTime(date);
  }

  (0, _vitest.beforeEach)(() => {
    _vitest.vi.useFakeTimers({ now: date });
  });

  (0, _vitest.afterEach)(() => {
    _vitest.vi.useRealTimers();
  });

  return { fakeNow };
}
