import type { ProviderServiceDelegate } from '../cloudProvider/providerService.delegate';
export interface IInstanceType {
    account: string;
    key?: string;
    name: string;
    region: string;
}
export interface IInstanceTypesByRegion {
    [region: string]: IInstanceType[];
}
export interface IInstanceStorage {
    type: string;
    size?: number;
    count?: number;
    isDefault?: boolean;
}
export interface IPreferredInstanceType {
    name: string;
    nameRegex?: RegExp;
    label?: string;
    cpu?: number;
    memory?: number;
    storage?: IInstanceStorage;
    costFactor?: number;
    unavailable?: boolean;
    helpFieldKey?: string;
}
export interface IInstanceTypeFamily {
    type: string;
    description?: string;
    storageHelpFieldKey?: string;
    storageType?: string;
    instanceTypes: IPreferredInstanceType[];
}
export interface IInstanceTypeCategory {
    type: string;
    label?: string;
    families: IInstanceTypeFamily[];
    icon?: string;
}
export interface IInstanceTypeService {
    resolveInstanceTypeDetails?: (instanceType: string) => PromiseLike<IPreferredInstanceType>;
    getCategories(): PromiseLike<IInstanceTypeCategory[]>;
    getAllTypesByRegion(): PromiseLike<IInstanceTypesByRegion>;
    getAvailableTypesForRegions(instanceTypes: string[], regions: string[]): PromiseLike<string[]>;
    getCategoryForInstanceType(instanceType: string): string;
}
export declare class InstanceTypeService {
    private providerServiceDelegate;
    static $inject: string[];
    constructor(providerServiceDelegate: ProviderServiceDelegate);
    getCategories(cloudProvider: string): PromiseLike<IInstanceTypeCategory[]>;
    getAllTypesByRegion(cloudProvider: string): PromiseLike<IInstanceTypesByRegion>;
    getAvailableTypesForRegions(cloudProvider: string, instanceTypes: string[], regions: string[]): PromiseLike<string[]>;
    getCategoryForInstanceType(cloudProvider: string, instanceType: string): PromiseLike<string>;
    getCategoryForMultipleInstanceTypes(cloudProvider: string, instanceTypes: string[]): Promise<string>;
    getInstanceTypeDetails(cloudProvider: string, instanceType: string): PromiseLike<IPreferredInstanceType>;
    private getInstanceTypeCategory;
    private getDelegate;
}
export declare const INSTANCE_TYPE_SERVICE = "spinnaker.core.instanceType.service";
