import { IDIService } from "../../IDIService";
import { HardwareInfo, SoftwareRuntimeInfo } from "./UpdatesProvider";
import { IUpdateProviderService } from "./UpdateProviderServices/IUpdateProviderService";
export interface IUpdatesProvider extends IDIService {
    RegisterUpdatesProvider(service: IUpdateProviderService): void;
    GetUpdatesProviderAsync<T extends IUpdateProviderService>(serviceName: string): Promise<T>;
    GetUpdatesProvidersAsync<T extends IUpdateProviderService>(updateProviderType: ProviderType): Promise<T[]>;
    GetUpdatesProvidersByProtocolAsync<T extends IUpdateProviderService>(protocolGuid: string, updateProviderType: ProviderType, apiVersion?: string): Promise<T[]>;
    GetUpdatesProvidersByExtensionAsync<T extends IUpdateProviderService>(extensionGuid: string, updateProviderType: ProviderType, apiVersion?: string): Promise<T[]>;
    GetSoftwareRuntimeInfoAsync(reloadCachedData?: boolean): Promise<SoftwareRuntimeInfo>;
    GetHardwareInfoAsync(reloadCachedData?: boolean): Promise<HardwareInfo>;
}
export declare enum ProviderType {
    Device = 0,
    Controller = 1
}
export declare class Update {
    UpdateGuid: string;
    Channel: string;
    Version: string;
    CurrentVersion: string;
    DownloadUri: string;
    Download: string;
    Name: string;
    Description: string;
    UpdateType: UpdateTypes;
    ResourceGuid: string;
}
export declare class UpdateInfo {
    UpdateDescription: Map<string, string>;
    Update: Update;
    UpdatedResourceName: string;
    CurrentResourceVersion: string;
}
export declare enum UpdateTypes {
    Unknown = 0,
    Container = 1,
    RadioFirmware = 2,
    DeviceFirmware = 3,
    Configuration = 4,
    ContainerScript = 5,
    ContainerSoftware = 6,
    RuntimeSoftware = 7,
    RuntimeScript = 8,
    RuntimeFixingScript = 9
}
export declare class UpdatesProviderNotFound extends Error {
    message: string;
    constructor(message: string);
}
