import { Strings } from '../i18n'
import { daysInTimeRange } from '../util'

/**
 * @deprecated
 * Future graphs should use timeIntervals
 */
export const oldGraphTimeIntervals = [
  'last7days',
  'last14days',
  'last28days',
] as const

export const timeIntervals = [
  'lastChartWeek',
  'last14days',
  'last28days',
  'last42days',
  'last56days',
  'last182days',
  'last364days',
] as const

export const allTimeIntervals = ['last7days', ...timeIntervals] as const

export type TimeInterval = typeof allTimeIntervals[number]

export const timeIntervalStringShort: Record<TimeInterval, string> = {
  last7days: Strings.TimeIntervals.NWeeksShort.replace('%d', '1'),
  last14days: Strings.TimeIntervals.NWeeksShort.replace('%d', '2'),
  last28days: Strings.TimeIntervals.NWeeksShort.replace('%d', '4'),
  last42days: Strings.TimeIntervals.NWeeksShort.replace('%d', '6'),
  last56days: Strings.TimeIntervals.NWeeksShort.replace('%d', '8'),
  last182days: Strings.TimeIntervals.NWeeksShort.replace('%d', '26'),
  last364days: Strings.TimeIntervals.NYearsShort.replace('%d', '1'),
  lastChartWeek: Strings.TimeIntervals.LatestChartWeekShort,
}
export const timeIntervalStringLong: Record<TimeInterval, string> = {
  last7days: Strings.TimeIntervals.LastNWeeks.replace('%d', '1'),
  last14days: Strings.TimeIntervals.LastNWeeks.replace('%d', '2'),
  last28days: Strings.TimeIntervals.LastNWeeks.replace('%d', '4'),
  last42days: Strings.TimeIntervals.LastNWeeks.replace('%d', '6'),
  last56days: Strings.TimeIntervals.LastNWeeks.replace('%d', '8'),
  last182days: Strings.TimeIntervals.LastNWeeks.replace('%d', '26'),
  last364days: Strings.TimeIntervals.Last1Year,
  lastChartWeek: Strings.TimeIntervals.LatestChartWeek,
}

export const defaultTimeInterval: TimeInterval = 'last28days'

export function timeIntervalOptions(timeIntervals: readonly TimeInterval[]) {
  return timeIntervals.map((timeInterval) => ({
    days: daysInTimeRange(timeInterval),
    label: timeIntervalStringLong[timeInterval],
    labelShort: timeIntervalStringShort[timeInterval],
    value: timeInterval,
  }))
}
