import { Logger } from 'winston';
import { Knex } from 'knex';
import { Config } from '@backstage/config';
import { Router } from 'express';

declare class DevLakeDatabase {
    private readonly client;
    constructor(config: Config, logger: Logger);
    testConnection(): Promise<boolean>;
    getClient(): Knex;
    listTables(): Promise<string[]>;
    describeTable(tableName: string): Promise<any[]>;
}

interface DeploymentFrequency {
    period: string;
    deploymentCount: number;
}
interface LeadTimeForChanges {
    date: string;
    leadTime: number;
}
interface MeanTimeToRestore {
    date: string;
    mttr: number;
}
interface ChangeFailureRate {
    date: string;
    rate: number;
    failureRate?: number;
}
interface DoraMetricsSummary {
    deploymentFrequency: {
        value: string;
        level: 'elite' | 'high' | 'medium' | 'low';
    };
    leadTimeForChanges: {
        value: string;
        level: 'elite' | 'high' | 'medium' | 'low';
    };
    meanTimeToRestore: {
        value: string;
        level: 'elite' | 'high' | 'medium' | 'low';
    };
    changeFailureRate: {
        value: string;
        level: 'elite' | 'high' | 'medium' | 'low';
    };
}
declare class DoraMetricsService {
    private readonly database;
    private readonly logger;
    private deploymentFrequencyMetadata;
    private leadTimeMetadata;
    private mttrMetadata;
    private failureRateMetadata;
    constructor(database: DevLakeDatabase, logger: Logger);
    /**
     * Get a list of all projects available in DevLake
     */
    getProjects(): Promise<string[]>;
    /**
     * Get deployment frequency data for a project
     */
    getDeploymentFrequency(projectKey: string, timeRange?: string): Promise<DeploymentFrequency[]>;
    /**
     * Get lead time for changes data for a project
     */
    getLeadTimeForChanges(projectKey: string, timeRange?: string): Promise<LeadTimeForChanges[]>;
    /**
     * Get mean time to restore data for a project
     */
    getMeanTimeToRestore(projectKey: string, timeRange?: string): Promise<MeanTimeToRestore[]>;
    /**
     * Get change failure rate data for a project
     */
    getChangeFailureRate(projectKey: string, timeRange?: string): Promise<ChangeFailureRate[]>;
    /**
     * Get summary of all DORA metrics for a project
     */
    getDoraMetricsSummary(projectKey: string, timeRange?: string): Promise<DoraMetricsSummary>;
}

interface RouterOptions {
    logger: Logger;
    config: Config;
    service: DoraMetricsService;
}
declare function createRouter(options: RouterOptions): Router;

export { ChangeFailureRate, DeploymentFrequency, DevLakeDatabase, DoraMetricsService, DoraMetricsSummary, LeadTimeForChanges, MeanTimeToRestore, createRouter };
