import { AppLoggerService } from 'src/common/services/logger.service';
import { ProgramRepository } from 'src/program/program.repository';
import { ReportsRepository } from './reports.repository';
import { ReportFieldDef, ReportRow } from './types/report-field.types';
import { ExcelService } from 'src/common/services/excel.service';
import { AwsS3Service } from 'src/common/services/awsS3.service';
import { GenerateReportDto } from './dto/generate-report.dto';
import { GenerateSessionAttendanceReportDto } from './dto/generate-session-attendance-report.dto';
import { DownloadZoomLinksDto } from './dto/download-zoom-links.dto';
import { FeatureFlagService } from 'src/feature-flag/feature-flag.service';
export interface ReportTableHeader {
    key: string;
    label: string;
    alias: string;
    order: number;
    type: string;
    sortable: boolean;
    filterable: boolean;
}
export interface TransformedReport {
    data: ReportRow[];
    tableHeaders: ReportTableHeader[];
    total: number;
    fieldDefs?: Record<string, ReportFieldDef>;
}
export interface ReportUserContext {
    userRoles: string[];
    userId: number | null;
}
export declare class ReportsService {
    private readonly reportsRepository;
    private readonly programRepository;
    private readonly logger;
    private readonly excelService;
    private readonly awsS3Service;
    private readonly featureFlagService;
    private fieldDefsCache;
    private fieldDefsCachedAt;
    private sessionAttendanceFieldDefsCache;
    private sessionAttendanceFieldDefsCachedAt;
    constructor(reportsRepository: ReportsRepository, programRepository: ProgramRepository, logger: AppLoggerService, excelService: ExcelService, awsS3Service: AwsS3Service, featureFlagService: FeatureFlagService);
    private resolveProgramTypeId;
    private assertReportFeatureEnabled;
    getReportFeatureFlags(programId: number): Promise<Record<string, boolean>>;
    private getFieldDefsMap;
    private getSessionAttendanceFieldDefsMap;
    getAvailableSessionAttendanceFields(programId: number): Promise<{
        key: string;
        label: string;
        group: string;
        order: number;
    }[]>;
    generateSessionAttendanceReport(dto: GenerateSessionAttendanceReportDto, userContext?: ReportUserContext): Promise<TransformedReport>;
    private resolveSessionAttendanceReportFields;
    buildSessionAttendanceExcel(rows: Record<string, unknown>[], fields: string[], fileName?: string, defsOverride?: Record<string, ReportFieldDef>): Promise<string>;
    private generateSessionDropoffsReport;
    private generateGeneralAttendeeFamilyReport;
    private generateGeneralSessionDropoffsReport;
    private generateEligibleRegistrationsAttendanceReport;
    private pivotEligibleRegistrationsAttendance;
    getAvailableFields(programId: number): Promise<{
        key: string;
        label: string;
        group: string;
        order: number;
    }[]>;
    private resolveRmContactId;
    generateReport(dto: GenerateReportDto, userContext?: ReportUserContext): Promise<TransformedReport>;
    transformCustomReportData(rawRows: Record<string, unknown>[], orderedFields: string[], activeFlags: Set<string> | undefined, defs: Record<string, ReportFieldDef>): TransformedReport;
    private buildReportTableHeaders;
    private resolveFormat;
    private buildActiveFlags;
    buildExcel(rows: Record<string, unknown>[], fields: string[], fileName?: string, defsOverride?: Record<string, ReportFieldDef>): Promise<string>;
    downloadZoomLinks(dto: DownloadZoomLinksDto, userContext?: ReportUserContext): Promise<string>;
}
