import { PlatformConfig } from 'homebridge';
import { ConfigSchemaData, SchemaAppliance, SchemaProgramOptionType, SchemaProgramOptionValue } from './schema-data.js';
export interface JSONSchemaEnumValue<Type> {
    title: string;
    const: Type;
}
export interface JSONSchemaArray {
    type: 'array';
    items: JSONSchema;
    minItems?: number;
    maxItems?: number;
    uniqueItems?: boolean;
    default?: unknown[];
}
export interface JSONSchemaValue {
    type: SchemaProgramOptionType;
    default?: SchemaProgramOptionValue;
    enum?: SchemaProgramOptionValue[];
    enumNames?: string[];
    oneOf?: JSONSchemaEnumValue<SchemaProgramOptionValue>[];
    minimum?: number;
    maximum?: number;
    multipleOf?: number;
    minLength?: number;
    maxLength?: number;
    pattern?: string;
}
export type JSONSchemaProperties = Record<string, JSONSchema>;
export interface JSONSchemaObject {
    type: 'object';
    properties: JSONSchemaProperties;
}
export type JSONSchema = (JSONSchemaArray | JSONSchemaValue | JSONSchemaObject) & {
    required?: boolean;
};
export interface FormItemCommon<Type = SchemaProgramOptionValue> {
    key?: string;
    title?: string;
    notitle?: boolean;
    description?: string;
    validationMessage?: string;
    placeholder?: Type;
    condition?: {
        functionBody: string;
    } | {
        functionBodyRaw: string;
    };
    expandable?: boolean;
    expanded?: boolean;
    startEmpty?: boolean;
}
export interface FormItemValue<Type = SchemaProgramOptionValue> extends FormItemCommon<Type> {
    type?: 'input' | 'number' | 'select' | 'checkboxes' | 'radio' | 'radiobuttons';
    fieldAddonLeft?: string;
    fieldAddonRight?: string;
    minimum?: number;
    maximum?: number;
    multipleOf?: number;
    default?: Type;
    oneOf?: JSONSchemaEnumValue<Type>[];
    titleMap?: Record<string, string>;
}
export interface FormItemGroup extends FormItemCommon {
    type: 'fieldset' | 'flex';
    items: FormItem[];
    'flex-flow'?: string;
}
export interface FormItemHelp extends FormItemCommon {
    type: 'help';
    helpvalue: string;
}
export type FormItem = FormItemValue | FormItemGroup | FormItemHelp;
export interface SchemaFormFragment {
    schema: JSONSchemaProperties;
    form: FormItem[];
    code?: string;
}
export interface FormSchema {
    schema: JSONSchema;
    form?: FormItem[];
    layout?: Record<string, unknown>[] | null;
}
export declare class ConfigSchema extends ConfigSchemaData {
    getSchemaFragmentPlugin(): SchemaFormFragment;
    getSchemaHomeConnectLanguages(): JSONSchema;
    getSchemaFragmentClient(): SchemaFormFragment;
    getSchemaFragmentExperimental(): SchemaFormFragment;
    getSchemaFragmentDebug(): SchemaFormFragment;
    getSchemaFragmentApplianceNames(appliance: SchemaAppliance): SchemaFormFragment;
    getSchemaFragmentApplianceOptionalFeatures(appliance: SchemaAppliance): SchemaFormFragment;
    getSchemaFragmentAppliancePrograms(appliance: SchemaAppliance): SchemaFormFragment;
    getConfig(): Promise<PlatformConfig | undefined>;
    getSchemaGlobal(): Promise<FormSchema>;
    getSchemaAppliance(haid: string): Promise<FormSchema | undefined>;
}
//# sourceMappingURL=schema.d.ts.map