import type { DestinationCalendar, BookingReference } from '../prisma-client';
import type { z } from "zod";
import type { EventTypeAppMetadataSchema } from '../prisma/zod-utils';
import type { CalendarEvent } from "@calcom/types/Calendar";
import type { CredentialForCalendarService } from "@calcom/types/Credential";
import type { CreateUpdateResult, PartialBooking } from "@calcom/types/EventManager";
export declare const isDedicatedIntegration: (location: string) => boolean;
export declare const getLocationRequestFromIntegration: (location: string) => {
    conferenceData: {
        createRequest: {
            requestId: string;
        };
    };
    location: string;
} | null;
export declare const processLocation: (event: CalendarEvent) => CalendarEvent;
export type EventManagerUser = {
    credentials: CredentialForCalendarService[];
    destinationCalendar: DestinationCalendar | null;
};
export type EventManagerInitParams = {
    user: EventManagerUser;
    eventTypeAppMetadata?: z.infer<typeof EventTypeAppMetadataSchema>;
};
export default class EventManager {
    calendarCredentials: CredentialForCalendarService[];
    videoCredentials: CredentialForCalendarService[];
    crmCredentials: CredentialForCalendarService[];
    appOptions?: z.infer<typeof EventTypeAppMetadataSchema>;
    /**
     * Takes an array of credentials and initializes a new instance of the EventManager.
     *
     * @param user
     */
    constructor(user: EventManagerUser, eventTypeAppMetadata?: z.infer<typeof EventTypeAppMetadataSchema>);
    /**
     * Takes a CalendarEvent and creates all necessary integration entries for it.
     * When a video integration is chosen as the event's location, a video integration
     * event will be scheduled for it as well.
     *
     * @param event
     */
    create(event: CalendarEvent): Promise<CreateUpdateResult>;
    updateLocation(event: CalendarEvent, booking: PartialBooking): Promise<CreateUpdateResult>;
    private deleteCalendarEventForBookingReference;
    private deleteVideoEventForBookingReference;
    private getCredentialAndWarnIfNotFound;
    /**
     * Takes a calendarEvent and a rescheduleUid and updates the event that has the
     * given uid using the data delivered in the given CalendarEvent.
     *
     * @param event
     */
    reschedule(event: CalendarEvent, rescheduleUid: string, newBookingId?: number, changedOrganizer?: boolean, previousHostDestinationCalendar?: DestinationCalendar[] | null, isBookingRequestedReschedule?: boolean): Promise<CreateUpdateResult>;
    cancelEvent(event: CalendarEvent, bookingReferences: Pick<BookingReference, "uid" | "type" | "externalCalendarId" | "credentialId" | "thirdPartyRecurringEventId">[], isBookingInRecurringSeries?: boolean): Promise<void>;
    private deleteEventsAndMeetings;
    updateCalendarAttendees(event: CalendarEvent, booking: PartialBooking): Promise<void>;
    /**
     * Creates event entries for all calendar integrations given in the credentials.
     * When noMail is true, no mails will be sent. This is used when the event is
     * a video meeting because then the mail containing the video credentials will be
     * more important than the mails created for these bare calendar events.
     *
     * When the optional uid is set, it will be used instead of the auto generated uid.
     *
     * @param event
     * @param noMail
     * @private
     */
    private createAllCalendarEvents;
    /**
     * Checks which video integration is needed for the event's location and returns
     * credentials for that - if existing.
     * @param event
     * @private
     */
    private getVideoCredential;
    /**
     * Creates a video event entry for the selected integration location.
     *
     * When optional uid is set, it will be used instead of the auto generated uid.
     *
     * @param event
     * @private
     */
    private createVideoEvent;
    /**
     * Updates the event entries for all calendar integrations given in the credentials.
     * When noMail is true, no mails will be sent. This is used when the event is
     * a video meeting because then the mail containing the video credentials will be
     * more important than the mails created for these bare calendar events.
     *
     * @param event
     * @param booking
     * @private
     */
    private updateAllCalendarEvents;
    /**
     * Updates a single video event.
     *
     * @param event
     * @param booking
     * @private
     */
    private updateVideoEvent;
    private createAllCRMEvents;
    private updateAllCRMEvents;
    private deleteCRMEvent;
    private getAppOptionsFromEventMetadata;
}
export declare const placeholderCreatedEvent: {
    results: never[];
    referencesToCreate: never[];
};
//# sourceMappingURL=EventManager.d.ts.map