import { DataSource } from 'typeorm';
import { ExportJobStatus } from 'src/common/enum/export-job-status.enum';
import { QrAttendanceRepository } from './qr-attendance.repository';
import { AwsS3Service } from 'src/common/services/awsS3.service';
import { ExcelService } from 'src/common/services/excel.service';
import { AppLoggerService } from 'src/common/services/logger.service';
import { ProgramUserAttendance } from 'src/common/entities';
import { GenerateQrDto } from './dto/generate-qr.dto';
import { GenerateBulkQrDto } from './dto/generate-bulk.dto';
import { ScanQrDto } from './dto/scan-qr.dto';
import { ManualCheckinDto } from './dto/manual-checkin.dto';
import { BulkManualCheckinDto } from './dto/bulk-manual-checkin.dto';
import { GetAttendanceListDto } from './dto/get-attendance-list.dto';
import { UndoCheckinDto } from './dto/undo-checkin.dto';
import { AttendanceResponseDto } from './dto/attendance-response.dto';
export declare class QrAttendanceService {
    private readonly qrAttendanceRepository;
    private readonly awsS3Service;
    private readonly excelService;
    private readonly logger;
    private readonly dataSource;
    constructor(qrAttendanceRepository: QrAttendanceRepository, awsS3Service: AwsS3Service, excelService: ExcelService, logger: AppLoggerService, dataSource: DataSource);
    generateQr(dto: GenerateQrDto): Promise<ProgramUserAttendance>;
    startBulkGeneration(dto: GenerateBulkQrDto): Promise<{
        jobId: number;
        status: ExportJobStatus;
        total: number;
        folderName: string;
        s3Url: string;
    }>;
    getBulkJobStatus(jobId: number): Promise<import("src/common/entities").BackgroundJob>;
    private runBulkGeneration;
    scanQr(dto: ScanQrDto): Promise<ProgramUserAttendance>;
    manualCheckin(dto: ManualCheckinDto): Promise<ProgramUserAttendance>;
    bulkManualCheckin(dto: BulkManualCheckinDto): Promise<{
        updated: number;
        alreadyAttended: number;
        notFound: number;
    }>;
    undoCheckin(dto: UndoCheckinDto): Promise<void>;
    private appendAttendanceEvent;
    findById(id: number): Promise<ProgramUserAttendance>;
    findList(query: GetAttendanceListDto): Promise<{
        fileUrl: string;
    } | {
        data: AttendanceResponseDto[];
        total: number;
        limit: number;
        offset: number;
        statusCounts: {
            status: string;
            count: number;
        }[];
    }>;
    private assertSessionNotLocked;
    private generateAttendanceRecord;
    private downloadAsExcel;
    private buildFolderTimestamp;
    private buildFolderName;
    private generateQrBuffer;
}
