import { OnModuleInit } from '@nestjs/common';
import { ID, JobQueueService, Order, ProductVariant, ProductVariantService, RequestContext, TransactionalConnection } from '@vendure/core';
import { MetricsPluginOptions } from '../metrics.plugin';
import { AdvancedMetricSummary, AdvancedMetricSummaryInput } from '../ui/generated/graphql';
import { MetricStrategy } from './metric-strategy';
import { MetricSummary } from '../entities/metric-summary.entity';
import { RequestService } from './request-service';
export declare class MetricsService implements OnModuleInit {
    private variantService;
    private options;
    private connection;
    private jobQueueService;
    private requestService;
    private generateMetricsQueue;
    readonly metricStrategies: MetricStrategy[];
    constructor(variantService: ProductVariantService, options: MetricsPluginOptions, connection: TransactionalConnection, jobQueueService: JobQueueService, requestService: RequestService);
    onModuleInit(): Promise<void>;
    /**
     * Get metrics from cache, or create a job and keep polling the cache
     */
    getMetrics(ctx: RequestContext, input?: AdvancedMetricSummaryInput): Promise<AdvancedMetricSummary[]>;
    /**
     * Get all metrics from cache.
     * If any of the metrics is missing, returns undefined
     */
    getAllMetricsFromCache(ctx: RequestContext, from: Date, to: Date, variantIds: ID[]): Promise<AdvancedMetricSummary[] | undefined>;
    /**
     * Generate metrics for each strategy, and store them in the cache.
     */
    handleMetricsJob(ctx: RequestContext, startDate: Date, endDate: Date, variantIds: ID[]): Promise<AdvancedMetricSummary[] | undefined>;
    /**
     * Get orders with their lines in the given date range
     */
    getPlacedOrders(ctx: RequestContext, from: Date, to: Date, variants?: ProductVariant[]): Promise<Order[]>;
    findMetricSummary(ctx: RequestContext, cacheKey: string): Promise<MetricSummary | undefined | null>;
    saveMetricSummary(ctx: RequestContext, cacheKey: string, summary: AdvancedMetricSummary): Promise<MetricSummary | undefined | null>;
    /**
     * Create an identifier to store metrics in the cache.
     */
    private createCacheKey;
}
