import type { UserAvailabilityService, IFromUser, IToUser } from '../../../../../features/availability/lib/getUserAvailability';
import type { CheckBookingLimitsService } from '../../../../../features/bookings/lib/checkBookingLimits';
import type { QualifiedHostsService } from '../../../../../features/bookings/lib/host-filtering/findQualifiedHostsWithDelegationCredentials';
import type { BookingRepository } from '../../../../../features/bookings/repositories/BookingRepository';
import type { BusyTimesService } from '../../../../../features/busyTimes/services/getBusyTimes';
import type { TeamRepository } from '../../../../../features/ee/teams/repositories/TeamRepository';
import type { EventTypeRepository } from '../../../../../features/eventtypes/repositories/eventTypeRepository';
import type { FeaturesRepository } from '../../../../../features/flags/features.repository';
import type { PrismaOOORepository } from '../../../../../features/ooo/repositories/PrismaOOORepository';
import type { IRedisService } from '../../../../../features/redis/IRedisService';
import type { ScheduleRepository } from '../../../../../features/schedules/repositories/ScheduleRepository';
import type { NoSlotsNotificationService } from '../../../../../features/slots/handleNotificationWhenNoSlots';
import type { UserRepository } from '../../../../../features/users/repositories/UserRepository';
import type { ISelectedSlotRepository } from '../../../../../lib/server/repository/ISelectedSlotRepository';
import type { RoutingFormResponseRepository } from '../../../../../lib/server/repository/formResponse';
import type { GetScheduleOptions } from "./types";
export interface IGetAvailableSlots {
    slots: Record<string, {
        time: string;
        attendees?: number | undefined;
        bookingUid?: string | undefined;
        away?: boolean | undefined;
        fromUser?: IFromUser | undefined;
        toUser?: IToUser | undefined;
        reason?: string | undefined;
        emoji?: string | undefined;
    }[]>;
    troubleshooter?: any;
}
export type GetAvailableSlotsResponse = Awaited<ReturnType<(typeof AvailableSlotsService)["prototype"]["_getAvailableSlots"]>>;
export interface IAvailableSlotsService {
    oooRepo: PrismaOOORepository;
    scheduleRepo: ScheduleRepository;
    selectedSlotRepo: ISelectedSlotRepository;
    teamRepo: TeamRepository;
    userRepo: UserRepository;
    bookingRepo: BookingRepository;
    eventTypeRepo: EventTypeRepository;
    routingFormResponseRepo: RoutingFormResponseRepository;
    checkBookingLimitsService: CheckBookingLimitsService;
    userAvailabilityService: UserAvailabilityService;
    busyTimesService: BusyTimesService;
    redisClient: IRedisService;
    featuresRepo: FeaturesRepository;
    qualifiedHostsService: QualifiedHostsService;
    noSlotsNotificationService: NoSlotsNotificationService;
}
export declare class AvailableSlotsService {
    readonly dependencies: IAvailableSlotsService;
    constructor(dependencies: IAvailableSlotsService);
    private _getReservedSlotsAndCleanupExpired;
    private _getDynamicEventType;
    private getDynamicEventType;
    private applyOccupiedSeatsToCurrentSeats;
    private _getEventType;
    private getEventType;
    private doesRangeStartFromToday;
    /**
     * Filters slots to only include dates within the requested range.
     * This is necessary because buildDateRanges uses a ±1 day buffer when checking
     * if date overrides should be included (to handle timezone edge cases), which can
     * cause slots from adjacent days to leak into the response.
     */
    private _filterSlotsByRequestedDateRange;
    private filterSlotsByRequestedDateRange;
    private _getAllDatesWithBookabilityStatus;
    private getAllDatesWithBookabilityStatus;
    private getUserIdFromUsername;
    private getEventTypeId;
    private getTeamIdFromSlug;
    private _getBusyTimesFromLimitsForUsers;
    private getBusyTimesFromLimitsForUsers;
    private _getBusyTimesFromTeamLimitsForUsers;
    private getBusyTimesFromTeamLimitsForUsers;
    private _getOOODates;
    private getOOODates;
    private _getUsersWithCredentials;
    private getUsersWithCredentials;
    private getStartTime;
    private calculateHostsAndAvailabilities;
    private checkRestrictionScheduleEnabled;
    private _getRegularOrDynamicEventType;
    private getRegularOrDynamicEventType;
    getAvailableSlots: (args: GetScheduleOptions) => Promise<IGetAvailableSlots>;
    _getAvailableSlots({ input, ctx }: GetScheduleOptions): Promise<IGetAvailableSlots>;
}
//# sourceMappingURL=util.d.ts.map