import { OnModuleDestroy } from '@nestjs/common';
import { Repository } from 'typeorm';
import { Program, ProgramSession } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { UserRepository } from 'src/user/user.repository';
import { SessionCommunicationPurposeEnum } from 'src/common/enum/session-communication-purpose.enum';
import { EmailQueueService } from 'src/queue/services/email-queue.service';
import { WhatsAppQueueService } from 'src/queue/services/whatsapp-queue.service';
import { CommunicationMergeDataService } from 'src/communication/service/communication-merge-data.service';
import { CommunicationTemplatesRepository } from 'src/communication/repositories/communication-templates.repository';
import { CommunicationService } from 'src/communication/communication.service';
import { AwsS3Service } from 'src/common/services/awsS3.service';
import { SessionCommunicationRepository } from './session-communication.repository';
import { SendBulkSessionCommunicationDto, SendGeneralLinkBulkDto, SendGeneralLinkSingleDto, SendSingleSessionCommunicationDto, SendValueCardBulkDto, SendValueCardSingleDto, SendGeneralLinkValueCardBulkDto, SendGeneralLinkValueCardSingleDto } from './dto/send-session-communication.dto';
import { SendResult, SessionCommunicationStatusSummary } from './session-communication.types';
export declare class SessionCommunicationService implements OnModuleDestroy {
    private readonly sessionRepo;
    private readonly programRepo;
    private readonly repository;
    private readonly templatesRepository;
    private readonly mergeDataService;
    private readonly emailQueueService;
    private readonly whatsAppQueueService;
    private readonly communicationService;
    private readonly awsS3Service;
    private readonly userRepository;
    private readonly logger;
    private readonly pendingBackgroundWork;
    constructor(sessionRepo: Repository<ProgramSession>, programRepo: Repository<Program>, repository: SessionCommunicationRepository, templatesRepository: CommunicationTemplatesRepository, mergeDataService: CommunicationMergeDataService, emailQueueService: EmailQueueService, whatsAppQueueService: WhatsAppQueueService, communicationService: CommunicationService, awsS3Service: AwsS3Service, userRepository: UserRepository, logger: AppLoggerService);
    sendBulk(dto: SendBulkSessionCommunicationDto, createdBy: number, options?: {
        background?: boolean;
    }): Promise<SendResult>;
    sendValueCardBulk(dto: SendValueCardBulkDto, createdBy: number): Promise<SendResult>;
    sendValueCardSingle(dto: SendValueCardSingleDto, createdBy: number): Promise<SendResult>;
    private loadStoredValueCardDetails;
    private toQueueAttachments;
    private resolveDirectAttachments;
    private requireFileBuffer;
    private buildSendAttachmentsFromUrls;
    sendCommonInviteBulk(programId: number, createdBy: number, sessionId?: number): Promise<SendResult>;
    sendSystemLinksBulk(programId: number, createdBy: number, sessionId?: number): Promise<SendResult>;
    sendGeneralLinkBulk(dto: SendGeneralLinkBulkDto, createdBy: number): Promise<SendResult>;
    sendGeneralLinkValueCardBulk(dto: SendGeneralLinkValueCardBulkDto, createdBy: number): Promise<SendResult>;
    sendGeneralLinkValueCardSingle(dto: SendGeneralLinkValueCardSingleDto, createdBy: number): Promise<SendResult>;
    sendGeneralLinkSingle(dto: SendGeneralLinkSingleDto, createdBy: number): Promise<SendResult>;
    private resolveAdminRecipients;
    private prepareValueCardFiles;
    private fetchFileBuffer;
    private storeValueCardDetails;
    private fileNameFromUrl;
    private mimeTypeFromUrl;
    sendSingle(dto: SendSingleSessionCommunicationDto, createdBy: number): Promise<SendResult>;
    private runInBackground;
    whenBackgroundWorkSettles(): Promise<void>;
    onModuleDestroy(): Promise<void>;
    private recordSendStatus;
    private resolveSendContext;
    private buildProgramContext;
    private buildSessionContext;
    triggerProgramCommunication(programId: number, purpose: SessionCommunicationPurposeEnum, createdBy: number): Promise<SendResult | void>;
    getSummary(programId: number, registrationIds?: number[]): Promise<{
        registrationId: number;
        byCommunication: Record<string, {
            email: number;
            whatsapp: number;
            lastSentAt: Date | string | null;
        }>;
    }[]>;
    getTriggeredPurposesForSessions(programId: number, sessionIds: number[]): Promise<Map<number, SessionCommunicationPurposeEnum[]>>;
    getLatestSessionStatus(sessionId: number, purpose: SessionCommunicationPurposeEnum): Promise<SessionCommunicationStatusSummary | null>;
    private filterRecipients;
    private filterProgramCompletionRecipients;
    private resolveFinalSessionId;
    private fetchChannelTemplates;
    private fetchTemplatesForChannels;
    private processCommunications;
    private resolveForSend;
    private dispatchEmailBatch;
    private tryEnqueueEmailBatch;
    private directSendEmailBatch;
    private dispatchEmailSingle;
    private tryEnqueueSingleEmail;
    private directSendSingleEmail;
    private dispatchWhatsAppBulk;
    private tryEnqueueBulkWhatsApp;
    private directSendBulkWhatsApp;
    private dispatchWhatsApp;
    private tryEnqueueWhatsApp;
    private directSendWhatsApp;
    private processCommonInvite;
    private resolveProgramLevelSend;
    private commonInviteMergeContext;
    private dispatchCommonInviteEmail;
    private dispatchCommonInviteWhatsApp;
    private processSystemLinks;
    private dispatchSystemLinksEmail;
    private buildSystemJoiningDetailsTable;
    private escapeHtml;
    private loadOnlineSession;
    private resolveOccurrence;
    private assertSelectionIds;
}
