"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildGroupByAndBoundaries = void 0;
const logger_1 = require("../helpers/logger");
function buildGroupByAndBoundaries(startDateString, endDateString) {
    const startDate = new Date(startDateString);
    const endDate = new Date(endDateString);
    const groupInterval = buildGroupInterval(startDate, endDate);
    logger_1.logger.debug('Found "%s" group interval.', groupInterval, { startDate, endDate });
    if (groupInterval.endsWith(' month') || groupInterval.endsWith(' months')) {
        startDate.setDate(1);
        startDate.setHours(0, 0, 0, 0);
    }
    else if (groupInterval.endsWith(' day') || groupInterval.endsWith(' days')) {
        startDate.setHours(0, 0, 0, 0);
    }
    else if (groupInterval.endsWith(' hour') || groupInterval.endsWith(' hours')) {
        startDate.setMinutes(0, 0, 0);
    }
    else {
        startDate.setSeconds(0, 0);
    }
    return {
        groupInterval,
        startDate,
        endDate
    };
}
exports.buildGroupByAndBoundaries = buildGroupByAndBoundaries;
function buildGroupInterval(startDate, endDate) {
    const aYear = 31536000;
    const aMonth = 2678400;
    const aDay = 86400;
    const anHour = 3600;
    const aMinute = 60;
    const diffSeconds = (endDate.getTime() - startDate.getTime()) / 1000;
    if (diffSeconds >= 6 * aYear)
        return '6 months';
    if (diffSeconds >= 2 * aYear)
        return '1 month';
    if (diffSeconds >= 6 * aMonth)
        return '7 days';
    if (diffSeconds >= 2 * aMonth)
        return '2 days';
    if (diffSeconds >= 15 * aDay)
        return '1 day';
    if (diffSeconds >= 8 * aDay)
        return '12 hours';
    if (diffSeconds >= 4 * aDay)
        return '6 hours';
    if (diffSeconds >= 15 * anHour)
        return '1 hour';
    if (diffSeconds >= 180 * aMinute)
        return '10 minutes';
    return '1 minute';
}
//# sourceMappingURL=timeserie.js.map