import { ProgramSession } from 'src/common/entities';
import { ZoomAnalyticsResourceType } from 'src/common/enum/zoom-analytics-resource-type.enum';
import { ZoomSessionKpis, ZoomGeneralAttendeeKpis, ZoomLiveStatus, ZoomAttendeeQuery, PaginatedZoomAttendeeRows, ZoomSessionDashboard, PaginatedZoomFollowUpRows } from './zoom-analytics.interface';
export interface ZoomAnalyticsProvider {
    readonly key: ZoomAnalyticsResourceType;
    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>;
    syncAttendeeSummaries(session: ProgramSession, rmContactId?: number): Promise<void>;
    markStarted(session: ProgramSession, startedAt: Date): Promise<void>;
    markEnded(session: ProgramSession, endedAt: Date): Promise<void>;
    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>;
}
