import { Repository } from 'typeorm';
import { ProgramUserAttendance, ProgramSession, ProgramRegistration } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
import { SessionAttendanceFilter, PaginatedAttendance } from './interfaces/online-attendance.interface';
export declare class OnlineAttendanceRepository {
    private readonly attendanceRepo;
    private readonly sessionRepo;
    private readonly registrationRepo;
    private readonly logger;
    constructor(attendanceRepo: Repository<ProgramUserAttendance>, sessionRepo: Repository<ProgramSession>, registrationRepo: Repository<ProgramRegistration>, logger: AppLoggerService);
    findSessionById(id: number): Promise<ProgramSession | null>;
    updateAttendanceLock(sessionId: number, patch: {
        isAttendanceLocked: boolean;
        attendanceLockedBy: number | null;
        attendanceLockedAt: Date | null;
        updatedBy: number;
    }): Promise<void>;
    findSessionByMeetingOrWebinarId(extId: string): Promise<ProgramSession | null>;
    listSessionsByProgram(programId: number, sessionId?: number): Promise<ProgramSession[]>;
    findConfirmedRegistration(programId: number, userId: number): Promise<ProgramRegistration | null>;
    findConfirmedRegistrationById(programId: number, registrationId: number): Promise<ProgramRegistration | null>;
    findRegistrationById(programId: number, registrationId: number): Promise<ProgramRegistration | null>;
    findById(id: number): Promise<ProgramUserAttendance | null>;
    findBySessionAndUser(sessionId: number, userId: number): Promise<ProgramUserAttendance | null>;
    findBySessionAndRegistration(sessionId: number, registrationId: number): Promise<ProgramUserAttendance | null>;
    findBySessionAndEmail(sessionId: number, email: string): Promise<ProgramUserAttendance | null>;
    save(attendance: ProgramUserAttendance): Promise<ProgramUserAttendance>;
    create(data: Partial<ProgramUserAttendance>): ProgramUserAttendance;
    listBySession(sessionId: number, filter: SessionAttendanceFilter): Promise<PaginatedAttendance>;
    findAllBySession(sessionId: number): Promise<ProgramUserAttendance[]>;
    findAttendedRegistrationIdsBySession(sessionId: number): Promise<number[]>;
    findAllBySessionIds(sessionIds: number[]): Promise<ProgramUserAttendance[]>;
}
