import { ConfigService } from '@nestjs/config';
import { ProgramSession, ProgramRegistrationOnlineSession } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { OnlineTypeEnum } from 'src/common/enum/online-type.enum';
import { CreateSessionInput, UpdateSessionInput, CreateSharedSessionInput } from 'src/common/interfaces/online-session.interface';
import { ZoomWebinarRepository } from '../repositories/zoom-webinar.repository';
import { ZoomApiService } from '../services/zoom-api.service';
import { ZoomRole } from '../enums/zoom-role.enum';
import { ZoomSessionBase } from './zoom-session.handler';
import { ZoomSessionHandler, ZoomContactInfo, ZoomParticipantResult } from '../interfaces/zoom-session.interface';
import { ZoomApiResponse, ZoomRecurrence } from '../interfaces/zoom-api.interface';
export declare class WebinarService extends ZoomSessionBase implements ZoomSessionHandler {
    constructor(repo: ZoomWebinarRepository, zoomApi: ZoomApiService, config: ConfigService, logger: AppLoggerService);
    create(input: CreateSessionInput): Promise<ProgramSession>;
    protected sharedOnlineType(): OnlineTypeEnum.WEBINAR | OnlineTypeEnum.MEETING;
    protected createSharedResource(input: CreateSharedSessionInput, anchor: ProgramSession, recurrence: ZoomRecurrence | undefined, hostEmail: string, duration: number): Promise<ZoomApiResponse>;
    protected updateOccurrence(externalId: string, occurrenceId: string, payload: {
        startAt: string;
        duration: number;
    }): Promise<void>;
    protected deleteSharedResource(externalId: string): Promise<void>;
    listTemplates(hostEmail?: string): Promise<{
        webinar: ZoomApiResponse[];
        meeting: ZoomApiResponse[];
    }>;
    update(session: ProgramSession, input: UpdateSessionInput): Promise<ProgramSession>;
    remove(session: ProgramSession, actorUserId?: number): Promise<void>;
    addParticipant(session: ProgramSession, contact: ZoomContactInfo, role: ZoomRole, autoApprove?: boolean): Promise<ZoomParticipantResult>;
    addPanelistsBulk(session: ProgramSession, contacts: ZoomContactInfo[]): Promise<Map<string, ZoomParticipantResult>>;
    removeParticipant(session: ProgramSession, extension: ProgramRegistrationOnlineSession, contact: ZoomContactInfo | null): Promise<void>;
    approveParticipant(session: ProgramSession, extension: ProgramRegistrationOnlineSession, contact: ZoomContactInfo): Promise<ZoomParticipantResult>;
    downgradePanelist(session: ProgramSession, extension: ProgramRegistrationOnlineSession, contact: ZoomContactInfo): Promise<{
        joinUrl: string | null;
        zoomRegistrantId: string | null;
    }>;
    private resolvePanelistDetails;
}
