import { EntityManager, Repository } from 'typeorm';
import { ProgramUserAttendance, ProgramRegistration, BackgroundJob, ProgramSession } from 'src/common/entities';
import { ExportJobStatus } from 'src/common/enum/export-job-status.enum';
import { AppLoggerService } from 'src/common/services/logger.service';
import { GetAttendanceListDto } from './dto/get-attendance-list.dto';
export declare class QrAttendanceRepository {
    private readonly attendanceRepo;
    private readonly registrationRepo;
    private readonly asyncJobRepo;
    private readonly sessionRepo;
    private readonly logger;
    constructor(attendanceRepo: Repository<ProgramUserAttendance>, registrationRepo: Repository<ProgramRegistration>, asyncJobRepo: Repository<BackgroundJob>, sessionRepo: Repository<ProgramSession>, logger: AppLoggerService);
    findSessionLockStatus(sessionId: number): Promise<{
        isAttendanceLocked: boolean;
    } | null>;
    findRegistrationById(registrationId: number): Promise<ProgramRegistration | null>;
    findRegistrationsWithoutQr(programId: number): Promise<ProgramRegistration[]>;
    findByRegistrationId(registrationId: number, manager?: EntityManager): Promise<ProgramUserAttendance | null>;
    findBySeqNumber(registrationSeqNumber: string, manager?: EntityManager): Promise<ProgramUserAttendance | null>;
    findById(id: number): Promise<ProgramUserAttendance>;
    findList(query: GetAttendanceListDto): Promise<[ProgramUserAttendance[], number]>;
    getAttendanceCounts(programId?: number, sessionId?: number): Promise<{
        total: number;
        checkedIn: number;
        yetToCheckIn: number;
    }>;
    createAttendance(data: Partial<ProgramUserAttendance>, manager?: EntityManager): Promise<ProgramUserAttendance>;
    saveAttendance(attendance: ProgramUserAttendance, manager?: EntityManager): Promise<ProgramUserAttendance>;
    findAttendanceById(id: number, manager?: EntityManager): Promise<ProgramUserAttendance | null>;
    findAttendancesByIds(ids: number[], manager?: EntityManager): Promise<ProgramUserAttendance[]>;
    findExistingAttendancesByIds(ids: number[], manager?: EntityManager): Promise<ProgramUserAttendance[]>;
    createBulkJob(data: Partial<BackgroundJob>): Promise<BackgroundJob>;
    findBulkJobById(id: number): Promise<BackgroundJob | null>;
    updateBulkJob(id: number, updates: Partial<BackgroundJob>): Promise<void>;
    updateBulkJobStatus(id: number, status: ExportJobStatus, extra?: Partial<BackgroundJob>): Promise<void>;
}
