import { RepoRef } from "@atomist/automation-client";
import { FP, Ideal } from "@atomist/sdm-pack-fingerprint";
import { Analyzed } from "../../../aspect/AspectRegistry";
import { IdealStore } from "../../../aspect/IdealStore";
import { ProblemUsage } from "../../../aspect/ProblemStore";
import { PlantedTree, TagUsage } from "../../../tree/sunburst";
import { ProjectAnalysisResult } from "../../ProjectAnalysisResult";
import { CohortAnalysis } from "../spider/analytics";
import { ClientFactory } from "./pgUtils";
import { FingerprintInsertionResult, FingerprintKind, FingerprintUsage, PersistResult, ProjectAnalysisResultStore, TreeQuery } from "./ProjectAnalysisResultStore";
export declare class PostgresProjectAnalysisResultStore implements ProjectAnalysisResultStore, IdealStore {
    readonly clientFactory: ClientFactory;
    fingerprintsToReposTree(treeQuery: TreeQuery): Promise<PlantedTree>;
    aspectDriftTree(workspaceId: string, percentile: number, options?: {
        repos?: boolean;
        type?: string;
    }): Promise<PlantedTree>;
    distinctRepoCount(workspaceId: string): Promise<number>;
    virtualProjectCount(workspaceId: string): Promise<number>;
    latestTimestamp(workspaceId: string): Promise<Date>;
    loadInWorkspace(workspaceId: string, deep: boolean): Promise<ProjectAnalysisResult[]>;
    /**
     * Load repo
     * @param {string} workspaceId workspace id
     * @param {boolean} deep whether to load fingerprints also
     * @param {string} additionalWhereClause does not use aliases, but original table names
     * @param {any[]} additionalParameters additional parameters required by additional where clause
     * @return {Promise<ProjectAnalysisResult[]>}
     */
    private loadInWorkspaceInternal;
    loadById(id: string, deep: boolean): Promise<ProjectAnalysisResult | undefined>;
    loadByRepoRef(repo: RepoRef, deep: boolean): Promise<ProjectAnalysisResult | undefined>;
    persist(repos: ProjectAnalysisResult | AsyncIterable<ProjectAnalysisResult> | ProjectAnalysisResult[]): Promise<PersistResult>;
    distinctFingerprintKinds(workspaceId: string): Promise<FingerprintKind[]>;
    distinctRepoFingerprintKinds(workspaceId: string): Promise<Array<{
        owner: string;
        repo: string;
        fingerprints: FingerprintKind[];
    }>>;
    tags(workspaceId: string): Promise<TagUsage[]>;
    fingerprintUsageForType(workspaceId: string, type?: string): Promise<FingerprintUsage[]>;
    storeIdeal(workspaceId: string, ideal: Ideal): Promise<void>;
    setIdeal(workspaceId: string, fingerprintId: string): Promise<void>;
    loadIdeals(workspaceId: string): Promise<Ideal[]>;
    noteProblem(workspaceId: string, fingerprintId: string): Promise<void>;
    storeProblemFingerprint(workspaceId: string, fp: ProblemUsage): Promise<void>;
    loadProblems(workspaceId: string): Promise<ProblemUsage[]>;
    loadIdeal(workspaceId: string, type: string, name: string): Promise<Ideal>;
    loadFingerprintById(id: string): Promise<FP | undefined>;
    /**
     * Key is persistent fingerprint id
     */
    private fingerprintsInWorkspaceRecord;
    fingerprintsInWorkspace(workspaceId: string, distinct: boolean, type?: string, name?: string): Promise<Array<FP & {
        id: string;
    }>>;
    fingerprintsForProject(snapshotId: string): Promise<Array<FP & {
        timestamp: Date;
        commitSha: string;
    }>>;
    averageFingerprintCount(workspaceId?: string): Promise<number>;
    persistAnalytics(data: Array<{
        workspaceId: string;
        kind: FingerprintKind;
        cohortAnalysis: CohortAnalysis;
    }>): Promise<boolean>;
    private persistAnalysisResults;
    private persistOne;
    persistAdditionalFingerprints(analyzed: Analyzed): Promise<FingerprintInsertionResult>;
    private persistFingerprints;
    /**
     * Persist the given fingerprint if it's not already known
     * @param {FP} fp
     * @param {Client} client
     * @return {Promise<void>}
     */
    private ensureFingerprintStored;
    constructor(clientFactory: ClientFactory);
}
//# sourceMappingURL=PostgresProjectAnalysisResultStore.d.ts.map