import { Status } from "../../DataFrame";
import { IDIService } from "../../IDIService";
import { ITypedEvent } from "../../TypedEvent";
import { DeviceUsedInScenes } from "./DevicesService";
import { DeviceTasksInfo, IDevice, ManuallyPairedDevice } from './IDevice';
import { IDeviceChannel } from "./IDeviceChannel";
import { IDeviceState, IDeviceStateData } from './IDeviceState';
import { IDeviceTask } from "./IDeviceTask";
import { DeviceTaskExecutionResult } from './TaskExecutionResult';
export interface IDevicesService extends IDIService {
    OnDeviceStateChangedEvent(): ITypedEvent<{
        Device: IDevice;
        State: IDeviceState<IDeviceStateData>;
    }>;
    OnDeviceStateRefreshedOrChangedEvent(): ITypedEvent<{
        Device: IDevice;
        State: IDeviceState<IDeviceStateData>;
    }>;
    OnDeviceRegisteredEvent(): ITypedEvent<IDevice>;
    OnDeviceRemovedEvent(): ITypedEvent<IDevice>;
    OnDeviceFoundEvent(): ITypedEvent<IDevice>;
    OnDevicesTasksExecutionChangeEvent(): ITypedEvent<DeviceTasksInfo[]>;
    CanEditDevicesInfo(): boolean;
    CanAddAndRemoveAndConfigureDevices(): boolean;
    GetDeviceChannelByChannelId(channelId: string): IDeviceChannel | null;
    GetDevicesAsync(): Promise<IDevice[]>;
    GetDevicesAsync(withScenes: boolean): Promise<IDevice[]>;
    SyncDevicesStatesAsync(forceSlow?: boolean): Promise<boolean>;
    GetDevice(guid: string): IDevice | undefined;
    FindDevicesAsync(): Promise<void>;
    GetFoundDevicesAsync(): Promise<IDevice[]>;
    StopSearchingForDevices(): Promise<void>;
    RegisterDeviceAsync(device: IDevice): Promise<DeviceTaskExecutionResult>;
    RemoveDeviceAsync(device: IDevice, force?: boolean): Promise<DeviceTaskExecutionResult>;
    ExecuteDeviceTaskAsync(device: IDevice, task: IDeviceTask): Promise<DeviceTaskExecutionResult>;
    WaitForSynchronizationAsync(): Promise<void>;
    WaitForDevicesStatesSynchronizationAsync(): Promise<void>;
    ExecuteDevicesTasksAsync(tasks: [Device: IDevice, Task: IDeviceTask][]): Promise<DeviceTaskPairExecutionResult[]>;
    GetDevicesForManualPairingAsync(protocolExtensionGuids?: string[]): Promise<ManuallyPairedDevice[]>;
    GetDevicesForManualPairingAsync(protocolExtensionGuid?: string): Promise<ManuallyPairedDevice[]>;
    AddManuallyPairedDevice(device: ManuallyPairedDevice): Promise<DeviceTaskExecutionResult>;
    CheckIfDeviceUsedInScenesAsync(deviceGuid: string): Promise<DeviceUsedInScenes | Status>;
    CheckIfDeviceUsedInScenesAsync(device: IDevice): Promise<DeviceUsedInScenes | Status>;
    EnableFastStatesSyncAsync(): Promise<Status>;
    DisableFastStatesSyncAsync(): Promise<Status>;
    IsFastStatesSyncEnabledAsync(): Promise<boolean | Status>;
    ProtocolGuidToProtocolName(guid: string): string | null;
}
export declare class DeviceTaskPairExecutionResult {
    Device: IDevice | null;
    Channel: number;
    Task: IDeviceTask | null;
    Result: DeviceTaskExecutionResult;
}
