import { Logger } from 'homebridge';
import { LocalStorage } from 'node-persist';
import { ConfigPlugin } from '../config-types.js';
import { HomeAppliance } from '../api-types.js';
import { CommandKey, CommandKV, EventKV, OptionKey, OptionKV, ProgramDefinitionKV, ProgramKV, ProgramsKV, SettingKey, SettingKV, SettingValue, StatusKey, StatusKV, OptionValue } from '../api-value.js';
import { ProgramKey } from '../api-value-types.js';
import { HomeConnectAPI } from '../api.js';
import { MockAppliance } from './mock-appliance.js';
import { AuthorisationStatus } from '../api-ua-auth.js';
type MethodKey<Key extends keyof MockAppliance = keyof MockAppliance> = Key extends Key ? (MockAppliance[Key] extends (...args: any[]) => unknown ? Key : never) : never;
type MethodParams<Key extends MethodKey = MethodKey> = Parameters<MockAppliance[Key]>;
type MethodReturn<Key extends MethodKey = MethodKey> = ReturnType<MockAppliance[Key]>;
export declare class MockAPI implements HomeConnectAPI {
    readonly log: Logger;
    readonly config: ConfigPlugin;
    readonly persist: LocalStorage;
    appliances: Map<string, MockAppliance>;
    constructor(log: Logger, config: ConfigPlugin, persist: LocalStorage);
    addMock(constructor: new (...args: ConstructorParameters<typeof MockAppliance>) => MockAppliance): void;
    delay(): Promise<void>;
    request<Method extends MethodKey>(method: Method, haid: string, ...args: MethodParams<Method>): Promise<MethodReturn<Method>>;
    hasScope(_scope: string): boolean;
    getAuthorisationStatus(): Promise<AuthorisationStatus>;
    retryAuthorisation(): void;
    getAppliances(): Promise<HomeAppliance[]>;
    getAppliance(...args: [string]): Promise<HomeAppliance>;
    getPrograms(...args: [string]): Promise<ProgramsKV>;
    getAvailablePrograms(...args: [string]): Promise<ProgramsKV>;
    getAvailableProgram<Key extends ProgramKey>(...args: [string, Key]): Promise<ProgramDefinitionKV<Key>>;
    getActiveProgram(...args: [string]): Promise<ProgramKV>;
    setActiveProgram(...args: [string, ProgramKey, OptionKV[]]): Promise<void>;
    stopActiveProgram(...args: [string]): Promise<void>;
    getActiveProgramOptions(...args: [string]): Promise<OptionKV[]>;
    setActiveProgramOptions(...args: [string, OptionKV[]]): Promise<void>;
    getActiveProgramOption<Key extends OptionKey>(...args: [string, Key]): Promise<OptionKV<Key>>;
    setActiveProgramOption<Key extends OptionKey>(...args: [string, Key, OptionValue<Key>]): Promise<void>;
    getSelectedProgram(...args: [string]): Promise<ProgramKV>;
    setSelectedProgram(...args: [string, ProgramKey, OptionKV[]]): Promise<void>;
    getSelectedProgramOptions(...args: [string]): Promise<OptionKV[]>;
    setSelectedProgramOptions(...args: [string, OptionKV[]]): Promise<void>;
    getSelectedProgramOption<Key extends OptionKey>(...args: [string, Key]): Promise<OptionKV<Key>>;
    setSelectedProgramOption<Key extends OptionKey>(...args: [string, Key, OptionValue<Key>]): Promise<void>;
    getStatus(...args: [string]): Promise<StatusKV[]>;
    getStatusSpecific<Key extends StatusKey>(...args: [string, Key]): Promise<StatusKV<Key>>;
    getSettings(...args: [string]): Promise<SettingKV[]>;
    getSetting<Key extends SettingKey>(...args: [string, Key]): Promise<SettingKV<Key>>;
    setSetting<Key extends SettingKey>(...args: [string, Key, SettingValue<Key>]): Promise<void>;
    getCommands(...args: [string]): Promise<CommandKV[]>;
    setCommand(...args: [string, CommandKey]): Promise<void>;
    getEvents(haid?: string): AsyncGenerator<EventKV, void, void>;
}
export {};
//# sourceMappingURL=index.d.ts.map