import { BookingAuditProducerService } from '../../../booking-audit/lib/service/BookingAuditProducerService.interface';
import { AcceptedAuditData } from '../../../booking-audit/lib/actions/AcceptedAuditActionService';
import { CancelledAuditData } from '../../../booking-audit/lib/actions/CancelledAuditActionService';
import { RejectedAuditData } from '../../../booking-audit/lib/actions/RejectedAuditActionService';
import { RescheduleRequestedAuditData } from '../../../booking-audit/lib/actions/RescheduleRequestedAuditActionService';
import { AttendeeAddedAuditData } from '../../../booking-audit/lib/actions/AttendeeAddedAuditActionService';
import { AttendeeRemovedAuditData } from '../../../booking-audit/lib/actions/AttendeeRemovedAuditActionService';
import { ReassignmentAuditData } from '../../../booking-audit/lib/actions/ReassignmentAuditActionService';
import { LocationChangedAuditData } from '../../../booking-audit/lib/actions/LocationChangedAuditActionService';
import { NoShowUpdatedAuditData } from '../../../booking-audit/lib/actions/NoShowUpdatedAuditActionService';
import { SeatBookedAuditData } from '../../../booking-audit/lib/actions/SeatBookedAuditActionService';
import { SeatRescheduledAuditData } from '../../../booking-audit/lib/actions/SeatRescheduledAuditActionService';
import { CreatedAuditData } from '../../../booking-audit/lib/actions/CreatedAuditActionService';
import { RescheduledAuditData } from '../../../booking-audit/lib/actions/RescheduledAuditActionService';
import { ActionSource } from '../../../booking-audit/lib/types/actionSource';
import { HashedLinkService } from '../../../hashedLink/lib/service/HashedLinkService';
import { ISimpleLogger } from '../../../di/shared/services/logger.service';
import { Actor, BookingAuditContext } from '../../../booking-audit/lib/dto/types';
import { BookingCreatedPayload, BookingRescheduledPayload } from './types';
interface BookingEventHandlerDeps {
    log: ISimpleLogger;
    hashedLinkService: HashedLinkService;
    bookingAuditProducerService: BookingAuditProducerService;
}
interface OnBookingCreatedParams {
    payload: BookingCreatedPayload;
    actor: Actor;
    auditData: CreatedAuditData;
    source: ActionSource;
    operationId?: string | null;
    context?: BookingAuditContext;
}
interface OnBookingRescheduledParams {
    payload: BookingRescheduledPayload;
    actor: Actor;
    auditData: RescheduledAuditData;
    source: ActionSource;
    operationId?: string | null;
    context?: BookingAuditContext;
}
interface BaseBookingEventParams<TAuditData> {
    bookingUid: string;
    actor: Actor;
    organizationId: number | null;
    auditData: TAuditData;
    source: ActionSource;
    operationId?: string | null;
    context?: BookingAuditContext;
}
type OnBookingAcceptedParams = BaseBookingEventParams<AcceptedAuditData>;
type OnBookingCancelledParams = BaseBookingEventParams<CancelledAuditData>;
type OnRescheduleRequestedParams = BaseBookingEventParams<RescheduleRequestedAuditData>;
type OnAttendeeAddedParams = BaseBookingEventParams<AttendeeAddedAuditData>;
type OnNoShowUpdatedParams = BaseBookingEventParams<NoShowUpdatedAuditData>;
type OnBookingRejectedParams = BaseBookingEventParams<RejectedAuditData>;
type OnAttendeeRemovedParams = BaseBookingEventParams<AttendeeRemovedAuditData>;
type OnReassignmentParams = BaseBookingEventParams<ReassignmentAuditData>;
type OnLocationChangedParams = BaseBookingEventParams<LocationChangedAuditData>;
type OnSeatBookedParams = BaseBookingEventParams<SeatBookedAuditData>;
type OnSeatRescheduledParams = BaseBookingEventParams<SeatRescheduledAuditData>;
export declare class BookingEventHandlerService {
    private readonly deps;
    private readonly log;
    private readonly bookingAuditProducerService;
    constructor(deps: BookingEventHandlerDeps);
    onBookingCreated(params: OnBookingCreatedParams): Promise<void>;
    onBookingRescheduled(params: OnBookingRescheduledParams): Promise<void>;
    /**
     * Handles common tasks that need to be executed in both booking created and rescheduled events
     * A dedicated place because there are many tasks that need to be executed in both events.
     */
    private onBookingCreatedOrRescheduled;
    private updatePrivateLinkUsage;
    onBookingAccepted(params: OnBookingAcceptedParams): Promise<void>;
    onBookingCancelled(params: OnBookingCancelledParams): Promise<void>;
    onRescheduleRequested(params: OnRescheduleRequestedParams): Promise<void>;
    onAttendeeAdded(params: OnAttendeeAddedParams): Promise<void>;
    onNoShowUpdated(params: OnNoShowUpdatedParams): Promise<void>;
    onBookingRejected(params: OnBookingRejectedParams): Promise<void>;
    onAttendeeRemoved(params: OnAttendeeRemovedParams): Promise<void>;
    onReassignment(params: OnReassignmentParams): Promise<void>;
    onLocationChanged(params: OnLocationChangedParams): Promise<void>;
    onSeatBooked(params: OnSeatBookedParams): Promise<void>;
    onSeatRescheduled(params: OnSeatRescheduledParams): Promise<void>;
    /**
     * Handles bulk booking acceptance for recurring bookings
     * Creates a single task that will be processed to create multiple audit logs atomically
     */
    onBulkBookingsAccepted(params: {
        bookings: Array<{
            bookingUid: string;
            auditData: AcceptedAuditData;
        }>;
        actor: Actor;
        organizationId: number | null;
        operationId?: string | null;
        source: ActionSource;
        context?: BookingAuditContext;
    }): Promise<void>;
    /**
     * Handles bulk booking cancellation for recurring bookings
     * Creates a single task that will be processed to create multiple audit logs atomically
     */
    onBulkBookingsCancelled(params: {
        bookings: Array<{
            bookingUid: string;
            auditData: CancelledAuditData;
        }>;
        actor: Actor;
        organizationId: number | null;
        operationId?: string | null;
        source: ActionSource;
        context?: BookingAuditContext;
    }): Promise<void>;
    onBulkBookingsCreated(params: {
        bookings: Array<{
            bookingUid: string;
            auditData: CreatedAuditData;
        }>;
        actor: Actor;
        organizationId: number | null;
        operationId?: string | null;
        source: ActionSource;
    }): Promise<void>;
    onBulkBookingsRescheduled(params: {
        bookings: Array<{
            bookingUid: string;
            auditData: RescheduledAuditData;
        }>;
        actor: Actor;
        organizationId: number | null;
        operationId?: string | null;
        source: ActionSource;
    }): Promise<void>;
    onBulkBookingsRejected(params: {
        bookings: Array<{
            bookingUid: string;
            auditData: RejectedAuditData;
        }>;
        actor: Actor;
        organizationId: number | null;
        operationId?: string | null;
        source: ActionSource;
        context?: BookingAuditContext;
    }): Promise<void>;
}
export {};
//# sourceMappingURL=BookingEventHandlerService.d.ts.map