import { ConfigService } from '@nestjs/config';
import { ProgramSession } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { CreateSessionInput, CreateSharedSessionInput, SessionRecurrenceInput } from 'src/common/interfaces/online-session.interface';
import { OnlineTypeEnum } from 'src/common/enum/online-type.enum';
import { ZoomWebinarRepository } from '../repositories/zoom-webinar.repository';
import { ZoomApiService } from '../services/zoom-api.service';
import { ZoomApiResponse, ZoomRecurrence, ZoomOccurrence } from '../interfaces/zoom-api.interface';
export declare abstract class ZoomSessionBase {
    protected readonly repo: ZoomWebinarRepository;
    protected readonly zoomApi: ZoomApiService;
    protected readonly config: ConfigService;
    protected readonly logger: AppLoggerService;
    constructor(repo: ZoomWebinarRepository, zoomApi: ZoomApiService, config: ConfigService, logger: AppLoggerService);
    protected loadSession(id: number): Promise<ProgramSession>;
    protected ensureNotProvisioned(session: ProgramSession): void;
    protected resolveHostEmail(provided?: string): string;
    protected buildSessionTitle(session: ProgramSession, explicitTitle?: string): string;
    protected cancelInsteadOfDeleteRegistrant(): boolean;
    protected manualApprovalEnabled(): boolean;
    abstract create(input: CreateSessionInput): Promise<ProgramSession>;
    protected deriveDurationMinutes(session: ProgramSession): number;
    protected abstract sharedOnlineType(): OnlineTypeEnum.WEBINAR | OnlineTypeEnum.MEETING;
    protected abstract createSharedResource(input: CreateSharedSessionInput, anchor: ProgramSession, recurrence: ZoomRecurrence | undefined, hostEmail: string, duration: number): Promise<ZoomApiResponse>;
    protected abstract updateOccurrence(externalId: string, occurrenceId: string, payload: {
        startAt: string;
        duration: number;
    }): Promise<void>;
    protected abstract deleteSharedResource(externalId: string): Promise<void>;
    createSharedGroup(input: CreateSharedSessionInput): Promise<ProgramSession[]>;
    private createIndividualLinks;
    private createSharedLink;
    protected buildRecurrence(input: SessionRecurrenceInput | undefined, ordered: ProgramSession[]): ZoomRecurrence;
    private deriveWeeklyDays;
    protected alignOccurrencesToSessions(externalId: string, sessions: ProgramSession[], occurrences: ZoomOccurrence[], duration: number): Promise<Map<number, string>>;
    protected applyCommonFields(session: ProgramSession, input: CreateSessionInput): void;
    protected persistWithRollback(session: ProgramSession, extId: string | null, rollback: () => Promise<unknown>, logEvent: string): Promise<ProgramSession>;
}
