import { BillingDataRow, CloudConstantsEmissionsFactors } from '.';
import { GroupBy, TagCollection } from '@cloud-carbon-footprint/common';
export default interface FootprintEstimate {
    timestamp: Date;
    kilowattHours: number;
    co2e: number;
    usesAverageCPUConstant?: boolean;
}
export declare type KilowattHourTotals = {
    usageAmount?: number;
    cost?: number;
    kilowattHours: number;
};
export declare type KilowattHoursByServiceAndUsageUnit = {
    [key: string]: {
        [key: string]: KilowattHourTotals;
    };
};
export declare enum AccumulateKilowattHoursBy {
    COST = "cost",
    USAGE_AMOUNT = "usageAmount"
}
export declare const aggregateEstimatesByDay: (estimates: FootprintEstimate[]) => {
    [date: string]: FootprintEstimate;
};
export interface MutableEstimationResult {
    timestamp: Date;
    serviceEstimates: MutableServiceEstimate[];
    periodStartDate: Date;
    periodEndDate: Date;
    groupBy: GroupBy;
}
export interface MutableServiceEstimate {
    cloudProvider: string;
    accountId: string;
    accountName: string;
    serviceName: string;
    kilowattHours: number;
    co2e: number;
    cost: number;
    region: string;
    usesAverageCPUConstant: boolean;
    tags?: TagCollection;
}
export declare const accumulateKilowattHours: (kilowattHoursByServiceAndUsageUnit: KilowattHoursByServiceAndUsageUnit, billingDataRow: BillingDataRow, kilowattHours: number, accumulateBy: AccumulateKilowattHoursBy) => void;
export declare const appendOrAccumulateEstimatesByDay: (results: MutableEstimationResult[], rowData: BillingDataRow, footprintEstimate: FootprintEstimate, grouping: GroupBy, tagNames: string[]) => void;
export declare function getWattsByAverageOrMedian(computeProcessors: string[], wattsForProcessors: number[]): number;
export declare function getAverage(nums: number[]): number;
export declare function estimateCo2(estimatedKilowattHours: number, region: string, emissionsFactors: CloudConstantsEmissionsFactors): number;
export declare function estimateKwh(estimatedCo2e: number, region: string, emissionsFactors: CloudConstantsEmissionsFactors, replicationFactor?: number): number;
