import { Logger } from 'homebridge';
import { IHomebridgeUiFormHelper, PluginConfig, PluginFormSchema } from '@homebridge/plugin-ui-utils/ui.interface';
import { ClientIPC } from './client-ipc.js';
import { Config } from './config.js';
import { cloneTemplate } from './utils-dom.js';
export declare abstract class Form {
    readonly log: Logger;
    form?: IHomebridgeUiFormHelper;
    constructor(log: Logger);
    abstract getSchema(): Promise<PluginFormSchema>;
    abstract getData(): Promise<PluginConfig>;
    abstract putData(data: PluginConfig): Promise<void>;
    createForm(): Promise<void>;
    destroyForm(): void;
    patchSchema(schema: PluginFormSchema): PluginFormSchema;
    formFromTemplate(...args: Parameters<typeof cloneTemplate>): Record<string, string>[];
    formFromHTML(element: Node): Record<string, string>[];
}
export declare class GlobalForm extends Form {
    readonly ipc: ClientIPC;
    readonly config: Config;
    constructor(log: Logger, ipc: ClientIPC, config: Config);
    getSchema(): Promise<PluginFormSchema>;
    getData(): Promise<PluginConfig>;
    putData(data: PluginConfig): Promise<void>;
}
export declare class ApplianceForm extends Form {
    readonly ipc: ClientIPC;
    readonly config: Config;
    readonly haid: string;
    constructor(log: Logger, ipc: ClientIPC, config: Config, haid: string);
    getSchema(): Promise<PluginFormSchema>;
    getData(): Promise<PluginConfig>;
    putData(data: PluginConfig): Promise<void>;
}
export declare class TemplateForm extends Form {
    readonly elementAsForm: Record<string, string>[];
    constructor(log: Logger, ...args: Parameters<typeof cloneTemplate>);
    getSchema(): Promise<PluginFormSchema>;
    getData(): Promise<PluginConfig>;
    putData(): Promise<void>;
}
export declare enum FormId {
    Global = "global",
    Placeholder = "placeholder",
    Unavailable = "unavailable"
}
export declare class Forms {
    readonly log: Logger;
    readonly ipc: ClientIPC;
    readonly config: Config;
    currentForm?: Form;
    constructor(log: Logger, ipc: ClientIPC, config: Config);
    showForm(formId?: string): Promise<void>;
    constructAndShowForm(formId: string): Promise<void>;
    constructForm(formId: string): Form;
}
//# sourceMappingURL=forms.d.ts.map