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';
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;
}
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 fieldDefsCache;
    private fieldDefsCachedAt;
    constructor(reportsRepository: ReportsRepository, programRepository: ProgramRepository, logger: AppLoggerService, excelService: ExcelService, awsS3Service: AwsS3Service);
    private getFieldDefsMap;
    getAvailableFields(programId: number): Promise<{
        key: string;
        label: string;
        group: string;
        order: number;
    }[]>;
    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): Promise<string>;
}
