import dayjs from 'dayjs';
import isBetween from '../../_virtual/isBetween.js';
import RelativeDateRange from '../components/_inputs/date-range/types.js';

dayjs.extend(isBetween);
const RANGE_CALCULATORS = {
    [RelativeDateRange.YESTERDAY]: (now) => ({
        startDate: now.subtract(1, 'day'),
        endDate: now,
    }),
    [RelativeDateRange.TOMORROW]: (now) => ({
        startDate: now,
        endDate: now.add(1, 'day'),
    }),
    [RelativeDateRange.LAST_WEEK]: (now) => ({
        startDate: now.subtract(1, 'week'),
        endDate: now,
    }),
    [RelativeDateRange.NEXT_WEEK]: (now) => ({
        startDate: now,
        endDate: now.add(1, 'week'),
    }),
    [RelativeDateRange.LAST_MONTH]: (now) => ({
        startDate: now.subtract(1, 'month'),
        endDate: now,
    }),
    [RelativeDateRange.NEXT_MONTH]: (now) => ({
        startDate: now,
        endDate: now.add(1, 'month'),
    }),
};
const calcDatesInternal = (range) => {
    const now = dayjs().startOf('day');
    return RANGE_CALCULATORS[range](now);
};
const calcDates = (range) => {
    if (range === RelativeDateRange.NONE) {
        return null;
    }
    return calcDatesInternal(range);
};
/* -----------------------------------------
/* ADAPTERS
/* -----------------------------------------

/**
 * Adapter for date inputs (DD/MM/YYYY)
 */
const calcDatesForUI = (range) => {
    const result = calcDates(range);
    if (!result)
        return null;
    return {
        start: result.startDate.format('DD/MM/YYYY'),
        end: result.endDate.format('DD/MM/YYYY'),
    };
};
/**
 * Adapter for filter definitions (YYYY-MM-DD)
 */
const calcDatesForAPI = (range) => {
    const result = calcDates(range);
    if (!result)
        return null;
    return {
        start: result.startDate.format('YYYY-MM-DD'),
        end: result.endDate.format('YYYY-MM-DD'),
    };
};

export { calcDates, calcDatesForAPI, calcDatesForUI };
//# sourceMappingURL=durationCalculator.js.map
