import type { Logger } from "tslog";
import type { Workflow as WorkflowType } from "@calcom/ee/workflows/lib/types";
import type { BookingType } from './handleNewBooking/originalRescheduledBookingUtils';
import type { EventNameObjectType } from '../../eventtypes/lib/eventNaming';
import type { Prisma, User } from '../../../kysely/types.ts';
import type { SchedulingType } from '../../../prisma/enums';
import type { EventTypeMetadata } from '../../../prisma/zod-utils';
import type { AdditionalInformation, CalendarEvent, Person } from "@calcom/types/Calendar";
export declare const BookingActionMap: {
    readonly confirmed: "BOOKING_CONFIRMED";
    readonly rescheduled: "BOOKING_RESCHEDULED";
    readonly requested: "BOOKING_REQUESTED";
};
export type BookingActionType = (typeof BookingActionMap)["confirmed"] | (typeof BookingActionMap)["rescheduled"] | (typeof BookingActionMap)["requested"];
type EmailAndSmsPayload = {
    evt: CalendarEvent;
    eventType: {
        metadata?: EventTypeMetadata;
        schedulingType: SchedulingType | null;
    };
};
type RescheduleEmailAndSmsPayload = EmailAndSmsPayload & {
    rescheduleReason?: string;
    additionalInformation: AdditionalInformation;
    additionalNotes: string | null | undefined;
    iCalUID: string;
    users: (Pick<User, "name" | "email"> & {
        isFixed?: boolean;
    })[];
    changedOrganizer?: boolean;
    isRescheduledByBooker: boolean;
    originalRescheduledBooking: NonNullable<BookingType>;
};
type ConfirmedEmailAndSmsPayload = EmailAndSmsPayload & {
    workflows: WorkflowType[];
    eventNameObject: EventNameObjectType;
    additionalInformation: AdditionalInformation;
    additionalNotes: string | null | undefined;
    customInputs: Prisma.JsonObject | null | undefined;
};
type RequestedEmailAndSmsPayload = EmailAndSmsPayload & {
    attendees?: Person[];
    additionalNotes?: string | null;
};
type AddGuestsEmailAndSmsPayload = EmailAndSmsPayload & {
    newGuests: string[];
};
type RescheduledSideEffectsPayload = {
    action: typeof BookingActionMap.rescheduled;
    data: RescheduleEmailAndSmsPayload;
};
type ConfirmedSideEffectsPayload = {
    action: typeof BookingActionMap.confirmed;
    data: ConfirmedEmailAndSmsPayload;
};
type RequestedSideEffectsPayload = {
    action: typeof BookingActionMap.requested;
    data: RequestedEmailAndSmsPayload;
};
export type EmailsAndSmsSideEffectsPayload = RescheduledSideEffectsPayload | RequestedSideEffectsPayload | ConfirmedSideEffectsPayload;
export interface IBookingEmailSmsHandler {
    logger: Pick<Logger<unknown>, "warn" | "debug" | "error" | "getSubLogger">;
}
export declare class BookingEmailSmsHandler {
    private readonly log;
    constructor(dependencies: IBookingEmailSmsHandler);
    send(payload: EmailsAndSmsSideEffectsPayload): Promise<void>;
    /**
     * Handles notifications for a RESCHEDULED booking.
     */
    private _handleRescheduled;
    /**
     * Handles notifications for a RESCHEDULED RR booking.
     */
    private _handleRoundRobinRescheduled;
    /**
     * Handles notifications for a newly CONFIRMED booking.
     */
    private _handleConfirmed;
    /**
     * Handles notifications when a booking REQUEST is made (requires confirmation).
     */
    private _handleRequested;
    /**
     * Handles notifications when guests are added to an existing booking.
     */
    handleAddGuests(data: AddGuestsEmailAndSmsPayload): Promise<void>;
}
export {};
//# sourceMappingURL=BookingEmailSmsHandler.d.ts.map