import type { CloudResource, ResourceInventoryResult } from './resource-inventory';
export interface ResourceSignals {
    cpuAverage?: number;
    connectionsAverage?: number;
    iopsAverage?: number;
    invocations?: number;
    objectCount?: number;
    requests?: number;
    storageBytes?: number;
    cacheHitRate?: number;
}
export interface IdleResourceFinding {
    resource: CloudResource;
    signal: string;
    recommendation: string;
    monthlySavings: number | null;
}
export type OptimizationCategory = 'unused' | 'right-size' | 'commitment' | 'storage' | 'cdn';
export interface OptimizationRecommendation {
    category: OptimizationCategory;
    resource: CloudResource;
    recommendation: string;
    sourceSignal: string;
    currentCost: number | null;
    projectedCost: number | null;
    monthlySavings: number | null;
}
export interface OptimizationResult {
    recommendations: OptimizationRecommendation[];
    inventory: ResourceInventoryResult;
    savingsAvailable: boolean;
    warnings: string[];
}
export declare function resourceOptimizationRecommendations(resource: CloudResource, signals: ResourceSignals, currentCost: number | null, includeCommitments?: boolean): OptimizationRecommendation[];
export declare function cloudFrontOptimizationRecommendation(monthlyTransferCost: number, usageTypes: string[]): OptimizationRecommendation | null;
export declare function evaluateIdleResource(resource: CloudResource, signals: ResourceSignals, monthlySavings?: number | null): IdleResourceFinding | null;
export declare class ResourceOptimizationService {
    private inventory;
    private costs;
    private profile?;
    private region;
    constructor(profile?: string, region?: string);
    private metric;
    private signals;
    private resourceCosts;
    private resourceCost;
    private cloudFrontTransfer;
    unused(options?: {
        type?: string;
    }): Promise<{
        findings: IdleResourceFinding[];
        inventory: ResourceInventoryResult;
        savingsAvailable: boolean;
    }>;
    optimize(options?: {
        type?: string;
        includeCommitments?: boolean;
    }): Promise<OptimizationResult>;
}
