import { Repository } from 'typeorm';
import { CommunicationTrack, ProgramRegistration, SessionCommunicationStatus, ZoomGeneratedRegistrantLink } from 'src/common/entities';
import { RegistrationStatusEnum } from 'src/common/enum/registration-status.enum';
import { SessionCommunicationStatusEnum } from 'src/common/enum/session-communication-status.enum';
import { SessionCommunicationPurposeEnum } from 'src/common/enum/session-communication-purpose.enum';
import { BulkCommunicationSelectionModeEnum } from 'src/common/enum/bulk-communication-selection-mode.enum';
import { SessionCommunicationSummaryRow } from './session-communication.types';
export declare const SESSION_COMMUNICATION_ELIGIBLE_STATUSES: RegistrationStatusEnum[];
export interface SessionCommunicationRecipient {
    id: number;
    emailAddress: string | null;
    mobileNumber: string | null;
    fullName: string | null;
    programId: number | null;
}
export interface CommonInviteRecipient {
    userId: number | null;
    displayName: string | null;
    emailAddress: string | null;
    mobileNumber: string | null;
    joinUrl: string | null;
    meetingId: string | null;
    meetingPasscode: string | null;
    programSessionId?: number | null;
}
export interface SystemGeneratedLink {
    displayName: string | null;
    joinUrl: string | null;
}
export declare class SessionCommunicationRepository {
    private readonly trackRepo;
    private readonly registrationRepo;
    private readonly statusRepo;
    private readonly generatedLinkRepo;
    constructor(trackRepo: Repository<CommunicationTrack>, registrationRepo: Repository<ProgramRegistration>, statusRepo: Repository<SessionCommunicationStatus>, generatedLinkRepo: Repository<ZoomGeneratedRegistrantLink>);
    private queryEligibleRecipients;
    private queryAbsenteeRecipients;
    private queryAttendeeRecipients;
    private buildEligibleRecipientsQuery;
    private requireProvisionedLink;
    private buildLinkedRecipientsQuery;
    private toRecipient;
    getWelcomeRecipients(programId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[]): Promise<SessionCommunicationRecipient[]>;
    getCommonInviteRecipients(programId: number, sessionId?: number): Promise<CommonInviteRecipient[]>;
    getSystemPlaceholderLinks(programId: number, sessionId?: number): Promise<SystemGeneratedLink[]>;
    private generalLinkAttendanceClause;
    getGeneralLinkRecipients(programId: number, sessionId: number | null, purpose: SessionCommunicationPurposeEnum): Promise<CommonInviteRecipient[]>;
    getGeneralLinkRecipientById(programId: number, generatedLinkId: number, purpose: SessionCommunicationPurposeEnum): Promise<CommonInviteRecipient | null>;
    getValueCardRecipients(programId: number, sessionId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[]): Promise<SessionCommunicationRecipient[]>;
    getProgramCompletionRecipients(programId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[], finalSessionId?: number): Promise<SessionCommunicationRecipient[]>;
    getInviteRecipients(programId: number, sessionId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[]): Promise<SessionCommunicationRecipient[]>;
    getFinalInviteRecipients(programId: number, finalSessionId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[]): Promise<SessionCommunicationRecipient[]>;
    getAbsentRecipients(programId: number, sessionId: number, selectionMode: BulkCommunicationSelectionModeEnum, registrationIds?: number[]): Promise<SessionCommunicationRecipient[]>;
    findTriggeredPurposesBySessions(programId: number, sessionIds: number[]): Promise<Map<number, SessionCommunicationPurposeEnum[]>>;
    hasTriggeredBulkSend(programId: number, sessionId: number, purpose: SessionCommunicationPurposeEnum): Promise<boolean>;
    hasTriggeredScopedBulkSend(programId: number, sessionId: number | null, purpose: SessionCommunicationPurposeEnum): Promise<boolean>;
    findLatestSessionStatus(sessionId: number, purpose: SessionCommunicationPurposeEnum): Promise<SessionCommunicationStatus | null>;
    recordSendStatus(entry: {
        programId: number;
        sessionId: number | null;
        purpose: SessionCommunicationPurposeEnum;
        occurrence: string | null;
        status: SessionCommunicationStatusEnum;
        requestedCount: number;
        emailEnqueuedCount: number;
        whatsappEnqueuedCount: number;
        skippedCount: number;
        createdBy: number | null;
    }): Promise<void>;
    getSummary(programId: number, registrationIds?: number[]): Promise<SessionCommunicationSummaryRow[]>;
}
