import { ProgramSession } from 'src/common/entities';
import { OnlineTypeEnum } from 'src/common/enum/online-type.enum';
import { ZoomAnalyticsResourceType } from 'src/common/enum/zoom-analytics-resource-type.enum';
import { AppLoggerService } from 'src/common/services/logger.service';
import { ZoomWebinarRepository } from '../repositories/zoom-webinar.repository';
import { ZoomRegistrationRepository } from '../repositories/zoom-registration.repository';
import { ZoomAnalyticsSessionReport } from './zoom-report-api.client';
import { ZoomAnalyticsRosterRepository, ZoomAnalyticsRosterEntry } from '../repositories/zoom-analytics-roster.repository';
import { ZoomAnalyticsSessionSummaryRepository } from '../repositories/zoom-analytics-session-summary.repository';
import { ZoomAnalyticsAttendeeSummaryRepository } from '../repositories/zoom-analytics-attendee-summary.repository';
import { ZoomAnalyticsLiveEventRepository } from '../repositories/zoom-analytics-live-event.repository';
import { ZoomGeneratedRegistrantLinkRepository } from '../repositories/zoom-generated-registrant-link.repository';
import { ZoomAnalyticsConfigService } from './zoom-analytics-config.service';
import { OnlineAttendanceService } from 'src/online-attendance/online-attendance.service';
import { ZoomAnalyticsProvider } from '../interfaces/zoom-analytics-provider.interface';
import { ZoomSessionKpis, ZoomGeneralAttendeeKpis, ZoomLiveStatus, ZoomAttendeeQuery, PaginatedZoomAttendeeRows, ZoomSessionDashboard, PaginatedZoomFollowUpRows } from '../interfaces/zoom-analytics.interface';
export declare abstract class ZoomLiveEventAnalyticsProviderBase implements ZoomAnalyticsProvider {
    protected readonly webinarRepository: ZoomWebinarRepository;
    protected readonly rosterRepository: ZoomAnalyticsRosterRepository;
    protected readonly sessionSummaryRepository: ZoomAnalyticsSessionSummaryRepository;
    protected readonly attendeeSummaryRepository: ZoomAnalyticsAttendeeSummaryRepository;
    protected readonly liveEventRepository: ZoomAnalyticsLiveEventRepository;
    protected readonly config: ZoomAnalyticsConfigService;
    protected readonly logger: AppLoggerService;
    protected readonly onlineAttendanceService: OnlineAttendanceService;
    protected readonly registrationRepository: ZoomRegistrationRepository;
    protected readonly generatedLinkRepository: ZoomGeneratedRegistrantLinkRepository;
    abstract readonly key: ZoomAnalyticsResourceType;
    protected abstract readonly expectedOnlineType: OnlineTypeEnum;
    constructor(webinarRepository: ZoomWebinarRepository, rosterRepository: ZoomAnalyticsRosterRepository, sessionSummaryRepository: ZoomAnalyticsSessionSummaryRepository, attendeeSummaryRepository: ZoomAnalyticsAttendeeSummaryRepository, liveEventRepository: ZoomAnalyticsLiveEventRepository, config: ZoomAnalyticsConfigService, logger: AppLoggerService, onlineAttendanceService: OnlineAttendanceService, registrationRepository: ZoomRegistrationRepository, generatedLinkRepository: ZoomGeneratedRegistrantLinkRepository);
    protected abstract fetchRoster(onlineSessionId: number, rmContactId?: number): Promise<ZoomAnalyticsRosterEntry[]>;
    protected abstract fetchReport(extId: string): Promise<ZoomAnalyticsSessionReport | null>;
    reconcile(session: ProgramSession): Promise<void>;
    getKpis(session: ProgramSession, rmContactId?: number): Promise<ZoomSessionKpis>;
    getGeneralKpis(session: ProgramSession): Promise<ZoomGeneralAttendeeKpis>;
    getAttendeeTable(session: ProgramSession, query: ZoomAttendeeQuery, rmContactId?: number): Promise<PaginatedZoomAttendeeRows>;
    getLiveStatus(session: ProgramSession): Promise<ZoomLiveStatus>;
    getDashboard(session: ProgramSession): Promise<ZoomSessionDashboard>;
    getFollowUps(session: ProgramSession, query: ZoomAttendeeQuery): Promise<PaginatedZoomFollowUpRows>;
    private computeAttendanceSummary;
    private emptyAttendanceSummary;
    private resolveSessionEnd;
    private resolveKnownSessionEnd;
    private resolveDurationAsOf;
    private computeJourney;
    private midSessionDropoffs;
    private computeDropOffAnalysis;
    private computeMultipleLogins;
    private computeLateComers;
    private sincerityBandIndex;
    private computeSincerityMap;
    private normalizeDropOffReason;
    private buildFollowUpRow;
    private filterFollowUpRows;
    recordParticipantJoined(externalId: string, occurrenceId: string | null, email: string, occurredAt: Date, participantId: string | null, zoomDisplayName: string | null, meetingStartTime?: Date | null): Promise<void>;
    recordParticipantLeft(externalId: string, occurrenceId: string | null, email: string, occurredAt: Date, participantId: string | null, zoomDisplayName: string | null, leaveReason: string | null, meetingStartTime?: Date | null): Promise<void>;
    correctLiveState(session: ProgramSession, currentlyPresent: Map<string, string | null>): Promise<void>;
    markStarted(session: ProgramSession, startedAt: Date): Promise<void>;
    markEnded(session: ProgramSession, endedAt: Date): Promise<void>;
    private resolveRosterMatch;
    private matchRosterSeeker;
    private insertLiveEvent;
    syncAttendeeSummaries(session: ProgramSession, rmContactId?: number): Promise<void>;
    private resolveLateCutoff;
    private resolveDropoffCutoff;
    private booleanFromStatus;
    private statusFromBoolean;
    private resolveFinalPresentRegistrationIds;
    private matchesSourceStateFilter;
    private attendeeUpsertPayload;
    private indexAggregatesByRegistrationId;
    private selectGeneralAttendeeAggregates;
    private generalAttendeeUpsertPayload;
    private buildGeneralAttendeePayloads;
    private notJoinedGeneralAttendeePayload;
    private resolveSeekerAggregate;
    private syntheticFinalPresentAggregate;
    private splitIntervalAtSessionStart;
    private aggregateLiveEvents;
    private normalizeEmail;
}
