import { ProgramSession } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { ExcelService } from 'src/common/services/excel.service';
import { AttendanceStatus } from 'src/common/enum/attendance-status.enum';
import { OnlineAttendanceRepository } from './online-attendance.repository';
import { AttendanceReportQueryDto } from './dto/attendance-report-query.dto';
import { JoinSessionDto } from './dto/join-session.dto';
import { JoinSessionResult, SessionAttendanceReport, ProgramAttendanceReport, AttendanceRecord, RegistrationManualMarks, RecordZoomJoinParams, SessionAttendanceLockRecord } from './interfaces/online-attendance.interface';
export declare class OnlineAttendanceService {
    private readonly repository;
    private readonly logger;
    private readonly excelService;
    constructor(repository: OnlineAttendanceRepository, logger: AppLoggerService, excelService: ExcelService);
    joinSession(sessionId: number, userId: number, meta?: JoinSessionDto): Promise<JoinSessionResult>;
    private creditCompanions;
    private ensureJoinWindowOpen;
    resolveJoinUrl(session: ProgramSession): string;
    getManualMarksBySession(sessionId: number): Promise<RegistrationManualMarks[]>;
    getAttendedRegistrationIds(sessionId: number): Promise<Set<number>>;
    private findAttendanceRow;
    recordZoomJoin(params: RecordZoomJoinParams): Promise<void>;
    markAttendance(sessionId: number, registrationId: number, status: AttendanceStatus, roles: string[] | undefined, actorUserId?: number): Promise<AttendanceRecord>;
    undoAttendance(sessionId: number, registrationId: number, roles: string[] | undefined, actorUserId?: number): Promise<AttendanceRecord | undefined>;
    private assertRmScope;
    private hasSameActiveMark;
    private resolveAttendanceRow;
    unmarkAttendance(sessionId: number, registrationId: number, roles: string[] | undefined, adminUserId?: number): Promise<AttendanceRecord | undefined>;
    lockSessionAttendance(sessionId: number, actorUserId: number): Promise<SessionAttendanceLockRecord>;
    unlockSessionAttendance(sessionId: number, actorUserId: number): Promise<SessionAttendanceLockRecord>;
    private findOrCreateForRegistration;
    sessionReport(sessionId: number, query: AttendanceReportQueryDto): Promise<SessionAttendanceReport>;
    programReport(programId: number, query: AttendanceReportQueryDto): Promise<ProgramAttendanceReport>;
    exportSessionReport(sessionId: number): Promise<{
        fileUrl: string;
    }>;
    exportProgramReport(programId: number, query: AttendanceReportQueryDto): Promise<{
        fileUrl: string;
    }>;
    private toExcelRow;
    private uploadExcel;
    private emptyExcelRow;
    private appendEvent;
    private pushAndResolve;
    private resolveCreditedStatus;
    private recomputeSummary;
    private groupBySession;
    private breakdown;
    private toRecord;
    private rate;
    private requireSession;
}
