import { ProgramSession, ProgramRegistrationOnlineSession } from 'src/common/entities';
import { PendingSessionJob } from '../interfaces/online-session.interface';
import { AppLoggerService } from 'src/common/services/logger.service';
import { SessionProviderType } from 'src/common/enum/session-provider.enum';
import { ZoomWebinarStatus } from 'src/common/enum/zoom-webinar-status.enum';
import { CreateOnlineSessionDto } from '../dto/create-online-session.dto';
import { CreateSharedOnlineSessionDto } from '../dto/create-shared-online-session.dto';
import { UpdateOnlineSessionDto } from '../dto/update-online-session.dto';
import { RegisterParticipantDto } from '../dto/register-participant.dto';
import { BulkRegisterParticipantsDto } from '../dto/bulk-register-participants.dto';
import { OnlineSessionRepository } from '../repositories/online-session.repository';
import { OnlineSessionProviderRegistry } from './online-session-provider.registry';
import { OnlineSessionList, BulkOnlineSessionResult, BulkRegistrationStart, BulkRegistrationStatus, BulkRegistrationFailureList, SessionRegistrationList, ProvisionStatusOverview, ProvisionRegistrationList, ProvisionRegistrationStatus, EligibleCountSummary, ProgramEligibleRegistrationList, ProgramEligibleRegistrationsQuery, RmContactOption, ProgramBulkCommunications, SessionBulkCommunications, RegistrationActivationResult, SessionAttendanceSummary } from '../interfaces/online-session.interface';
import { JoinLinkSchedulerService } from 'src/join-link-scheduler/join-link-scheduler.service';
import { RegistrationOnlineSessionActivationStatus } from 'src/common/enum/registration-online-session-activation-status.enum';
import { UserTypeFilterValue } from 'src/common/utils/user-type-filter.util';
export declare class OnlineSessionService {
    private readonly registry;
    private readonly repository;
    private readonly logger;
    private readonly linkScheduler;
    constructor(registry: OnlineSessionProviderRegistry, repository: OnlineSessionRepository, logger: AppLoggerService, linkScheduler: JoinLinkSchedulerService);
    create(dto: CreateOnlineSessionDto): Promise<ProgramSession>;
    private syncLinkSchedule;
    createBulk(dtos: CreateOnlineSessionDto[]): Promise<BulkOnlineSessionResult>;
    generateGeneralLinksForSession(session: ProgramSession, provider?: SessionProviderType, actorUserId?: number): void;
    createShared(dto: CreateSharedOnlineSessionDto): Promise<ProgramSession[]>;
    update(id: number, dto: UpdateOnlineSessionDto): Promise<ProgramSession>;
    updateStatus(id: number, status: ZoomWebinarStatus, actorUserId?: number): Promise<ProgramSession>;
    remove(id: number, actorUserId?: number): Promise<void>;
    findOne(id: number): Promise<ProgramSession>;
    findAll(limit: number, offset: number, status?: ZoomWebinarStatus, programId?: number): Promise<OnlineSessionList>;
    getSessionBulkCommunications(sessions: Array<{
        id: number;
        programId: number | null;
    }>): Promise<Map<number, SessionBulkCommunications>>;
    getProgramBulkCommunications(programId: number): Promise<ProgramBulkCommunications>;
    getPendingJobsForSessions(sessions: Array<{
        id: number;
        createdBy: number | null;
    }>): Promise<Map<number, PendingSessionJob>>;
    private toStatusSummary;
    register(dto: RegisterParticipantDto): Promise<ProgramRegistrationOnlineSession | void>;
    bulkRegister(dto: BulkRegisterParticipantsDto, actorUserId?: number): Promise<BulkRegistrationStart>;
    getBulkRegistrationStatus(jobId: number): Promise<BulkRegistrationStatus>;
    getBulkRegistrationFailures(jobId: number, paging: {
        page: number;
        limit: number;
    }, rmContactId?: number): Promise<BulkRegistrationFailureList>;
    retryBulkRegistration(jobId: number, actorUserId?: number): Promise<BulkRegistrationStart>;
    getProgramRegistrationFailures(programId: number, query: {
        sessionId?: number;
        page: number;
        limit: number;
    }, rmContactId?: number): Promise<BulkRegistrationFailureList>;
    retryProgramRegistration(programId: number, sessionId?: number, actorUserId?: number): Promise<BulkRegistrationStart>;
    private toBulkRegistrationStatus;
    listRegistrations(sessionId: number, query: {
        page: number;
        limit: number;
        search?: string;
    }, rmContactId?: number): Promise<SessionRegistrationList>;
    exportRegistrations(sessionId: number, search?: string, rmContactId?: number): Promise<{
        fileUrl: string;
    }>;
    setRegistrationActivation(registrationId: number, activationStatus: RegistrationOnlineSessionActivationStatus, reason: string | null | undefined, actingUserId: number | null | undefined): Promise<RegistrationActivationResult>;
    getEligibleCount(sessionId: number): Promise<EligibleCountSummary>;
    listProgramEligibleRegistrations(programId: number, query: ProgramEligibleRegistrationsQuery): Promise<ProgramEligibleRegistrationList>;
    getProgramEligibleRmContacts(): Promise<RmContactOption[]>;
    getSessionAttendanceSummary(sessions: ProgramSession[], rmContactId?: number): Promise<Map<number, SessionAttendanceSummary>>;
    getProgramProvisionStatus(programId: number, sessionId?: number, rmContactId?: number, userType?: UserTypeFilterValue[]): Promise<ProvisionStatusOverview>;
    getSessionProvisionRegistrations(sessionId: number, query: {
        status?: ProvisionRegistrationStatus;
        page: number;
        limit: number;
        userType?: UserTypeFilterValue[];
    }, rmContactId?: number): Promise<ProvisionRegistrationList>;
    private providerOf;
    private toCreateInput;
    private toCreateSharedInput;
    private toUpdateInput;
}
