import { addFormatToken } from "../format/format.js";
import { addUnitAlias } from "./aliases.js";
import { addUnitPriority } from "./priorities.js";
import { addRegexToken, match1to2, match2 } from "../parse/regex.js";
import { addWeekParseToken } from "../parse/token.js";
import toInt from "../utils/to-int.js";
import { weekOfYear } from "./week-calendar-utils.js"; // FORMATTING

addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES

addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W'); // PRIORITIES

addUnitPriority('week', 5);
addUnitPriority('isoWeek', 5); // PARSING

addRegexToken('w', match1to2);
addRegexToken('ww', match1to2, match2);
addRegexToken('W', match1to2);
addRegexToken('WW', match1to2, match2);
addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
  week[token.substr(0, 1)] = toInt(input);
}); // HELPERS
// LOCALES

export function localeWeek(mom) {
  return weekOfYear(mom, this._week.dow, this._week.doy).week;
}
export var defaultLocaleWeek = {
  dow: 0,
  // Sunday is the first day of the week.
  doy: 6 // The week that contains Jan 6th is the first week of the year.

};
export function localeFirstDayOfWeek() {
  return this._week.dow;
}
export function localeFirstDayOfYear() {
  return this._week.doy;
} // MOMENTS

export function getSetWeek(input) {
  var week = this.localeData().week(this);
  return input == null ? week : this.add((input - week) * 7, 'd');
}
export function getSetISOWeek(input) {
  var week = weekOfYear(this, 1, 4).week;
  return input == null ? week : this.add((input - week) * 7, 'd');
}