import { Response } from 'express';
import { components } from '../types/api.d.js';
import { ReportingClient } from '../data/reportingClient.js';
import { ReportQuery } from '../types/ReportQuery.js';
import { ListWithWarnings } from '../data/types.d.js';

import Dict = NodeJS.Dict;

declare class ReportingService {
    private readonly reportingClient;
    constructor(reportingClient: ReportingClient);
    getCount(resourceName: string, token: string, listRequest: ReportQuery): Promise<number>;
    getList(resourceName: string, token: string, listRequest: ReportQuery): Promise<Array<NodeJS.Dict<string>>>;
    getListWithWarnings(resourceName: string, token: string, listRequest: ReportQuery): Promise<ListWithWarnings>;
    getDefinitionSummary(token: string, reportId: string, dataProductDefinitionsPath?: string): Promise<components['schemas']['ReportDefinitionSummary']>;
    getDefinitions(token: string, dataProductDefinitionsPath?: string): Promise<Array<components['schemas']['ReportDefinitionSummary']>>;
    getDefinition(token: string, reportId: string, variantId: string, dataProductDefinitionsPath?: string, query?: Dict<string | string[]>): Promise<components['schemas']['SingleVariantReportDefinition']>;
    requestAsyncReport(token: string, reportId: string, variantId: string, query: Record<string, string | boolean | number>): Promise<Dict<string>>;
    cancelAsyncRequest(token: string, reportId: string, variantId: string, executionId: string, dataProductDefinitionsPath?: string): Promise<Dict<string>>;
    downloadAsyncReport(token: string, reportId: string, variantId: string, tableId: string, query: Record<string, string | string[]>, res: Response): Promise<void>;
    downloadSyncReport(token: string, resourceName: string, query: Record<string, string | string[]>, res: Response): Promise<void>;
    getAsyncReport(token: string, reportId: string, variantId: string, tableId: string, query: Record<string, string | string[]>): Promise<Array<Record<string, string>>>;
    getAsyncSummaryReport(token: string, reportId: string, variantId: string, tableId: string, summaryId: string, query: Dict<string | number>): Promise<Array<Record<string, string>>>;
    getAsyncReportStatus(token: string, reportId: string, variantId: string, executionId: string, dataProductDefinitionsPath: string, tableId: string): Promise<components['schemas']['StatementExecutionStatus']>;
    getAsyncCount(token: string, tableId: string, dataProductDefinitionsPath?: string): Promise<number>;
    getAsyncInteractiveCount(token: string, tableId: string, reportId: string, id: string, filters: ReportQuery): Promise<number>;
}

export { ReportingService, ReportingService as default };
