import '../../../../../../@date-fns_tz@1.4.1/node_modules/@date-fns/tz/date/mini.js';
import { toTimeZone } from './toTimeZone.js';
import { isDateRange, isDateInterval, isDateAfterType, isDateBeforeType } from './typeguards.js';

function toZoneNoon(date, timeZone, noonSafe) {
    return toTimeZone(date, timeZone);
}
function convertMatcher(matcher, timeZone, noonSafe) {
    if (typeof matcher === "boolean" || typeof matcher === "function") {
        return matcher;
    }
    if (matcher instanceof Date) {
        return toZoneNoon(matcher, timeZone);
    }
    if (Array.isArray(matcher)) {
        return matcher.map((value) => value instanceof Date ? toZoneNoon(value, timeZone) : value);
    }
    if (isDateRange(matcher)) {
        return {
            ...matcher,
            from: matcher.from ? toTimeZone(matcher.from, timeZone) : matcher.from,
            to: matcher.to ? toTimeZone(matcher.to, timeZone) : matcher.to,
        };
    }
    if (isDateInterval(matcher)) {
        return {
            before: toZoneNoon(matcher.before, timeZone),
            after: toZoneNoon(matcher.after, timeZone),
        };
    }
    if (isDateAfterType(matcher)) {
        return {
            after: toZoneNoon(matcher.after, timeZone),
        };
    }
    if (isDateBeforeType(matcher)) {
        return {
            before: toZoneNoon(matcher.before, timeZone),
        };
    }
    return matcher;
}
/**
 * Convert any {@link Matcher} or array of matchers to the specified time zone.
 *
 * @param matchers - The matcher or matchers to convert.
 * @param timeZone - The target IANA time zone.
 * @returns The converted matcher(s).
 * @group Utilities
 */
function convertMatchersToTimeZone(matchers, timeZone, noonSafe) {
    if (!matchers) {
        return matchers;
    }
    if (Array.isArray(matchers)) {
        return matchers.map((matcher) => convertMatcher(matcher, timeZone));
    }
    return convertMatcher(matchers, timeZone);
}

export { convertMatchersToTimeZone };
//# sourceMappingURL=convertMatchersToTimeZone.js.map
