import { Arrays } from 'collection-fns';
import { format, addDays, startOfWeek, parse, subMinutes } from 'date-fns';
import { Config } from './app-config';

export const getVisibleDates = (
  config: Pick<Config, 'advanceBookingDays' | 'dataRetentionDays'>
) => {
  const today = new Date();
  const start = addDays(today, -1 * config.dataRetentionDays);
  return Arrays.init({ count: config.advanceBookingDays + config.dataRetentionDays }, (i) =>
    format(addDays(start, i), 'yyyy-MM-dd')
  );
};

export const getAvailableDates = (config: Pick<Config, 'advanceBookingDays'>) => {
  const today = new Date();
  return Arrays.init({ count: config.advanceBookingDays }, (i) =>
    format(addDays(today, i), 'yyyy-MM-dd')
  );
};

export const dateStartOfWeek = (date: string) => {
  const start = startOfWeek(parse(date, 'yyyy-MM-dd', new Date()), { weekStartsOn: 1 });
  const adjustedToUTC = subMinutes(start, start.getTimezoneOffset());
  return format(adjustedToUTC, 'yyyy-MM-dd');
};