import { Logger, PlatformConfig } from 'homebridge';
import NodePersist from 'node-persist';
import { HomeAppliance } from '../api-types.js';
export interface SchemaProgram {
    key: string;
    name: string;
}
export type SchemaProgramOptionType = 'number' | 'integer' | 'boolean' | 'string';
export type SchemaProgramOptionValue = number | boolean | string;
export interface SchemaEnumValue {
    key: SchemaProgramOptionValue;
    name: string;
}
export interface SchemaProgramOption {
    key: string;
    name: string;
    type: SchemaProgramOptionType;
    suffix?: string;
    default?: SchemaProgramOptionValue;
    minimum?: number;
    maximum?: number;
    multipleOf?: number;
    values?: SchemaEnumValue[];
}
export interface SchemaProgramWithOptions extends SchemaProgram {
    options?: SchemaProgramOption[];
}
export interface SchemaOptionalFeature {
    group: string;
    name: string;
    service: string;
    enableByDefault: boolean;
}
export interface SchemaAppliance extends HomeAppliance {
    hasControl?: boolean;
    programs: SchemaProgramWithOptions[];
    features: SchemaOptionalFeature[];
}
export declare class ConfigSchemaData {
    readonly log: Logger;
    readonly persist: NodePersist.LocalStorage;
    config?: PlatformConfig;
    appliances: Map<string, SchemaAppliance>;
    loadPromise?: Promise<void>;
    savePromise?: Promise<void>;
    busyPromise?: Promise<void>;
    constructor(log: Logger, persist: NodePersist.LocalStorage);
    setConfig(config: PlatformConfig): Promise<void>;
    setAppliances(newAppliances: HomeAppliance[]): Promise<void>;
    setHasControl(haId: string, control: boolean): Promise<void>;
    setOptionalFeatures(haId: string, features: SchemaOptionalFeature[]): Promise<void>;
    setPrograms(haId: string, newPrograms: SchemaProgram[]): Promise<void>;
    setProgramOptions(haId: string, programKey: string, options: SchemaProgramOption[]): Promise<void>;
    applyUpdate(update: () => void): Promise<void>;
    load(reload?: boolean): Promise<void>;
    exclusive(operation: () => Promise<void>): Promise<void>;
    tryGet(): Promise<void>;
    trySet(): Promise<void>;
}
//# sourceMappingURL=schema-data.d.ts.map