import type { FeatureCategoryEntry, FeatureOptionEntry } from "homebridge-plugin-utils";
export interface ProtectOptions {
    controllers: ProtectNvrOptions[];
    debugAll: boolean;
    options: string[];
    ringDelay: number;
    verboseFfmpeg: boolean;
    videoProcessor: string;
}
export interface ProtectNvrOptions {
    address: string;
    doorbellMessages?: {
        duration: number;
        message: string;
    }[];
    mqttTopic: string;
    mqttUrl?: string;
    name?: string;
    overrideAddress?: string;
    password: string;
    username: string;
}
interface ProtectOptionMeta {
    hasAccessFeature?: string[];
    hasCameraFeature?: string[];
    hasFeature?: string[];
    hasLightProperty?: string[];
    hasProperty?: string[];
    hasSensorProperty?: string[];
    hasSmartObjectType?: string[];
    isNotProperty?: string[];
    modelKey?: string[];
}
interface ProtectCategoryMeta {
    featureByModel?: Record<string, string[]>;
    isNotProperty?: string[];
    modelKey?: string[];
}
export declare const featureOptionCategories: FeatureCategoryEntry<ProtectCategoryMeta>[];
export declare const featureOptions: Record<string, FeatureOptionEntry<ProtectOptionMeta>[]>;
/**
 * Documentation hook: returns the device-scope sentence emitted under a category heading, naming the device models the category applies to, or `undefined` when the
 * category declares no model scope.
 *
 * @param category - The category entry whose `meta.modelKey` scope to describe.
 *
 * @returns The full "These option(s) apply to: ..." sentence, or `undefined` to omit the line.
 */
export declare const describeCategoryScope: (category: FeatureCategoryEntry<ProtectCategoryMeta>) => string | undefined;
/**
 * Documentation hook: returns the "Supported on ..." suffix appended to an option's description cell, naming the capability or device model the option is gated on, or
 * `undefined` when the option declares no scope. The capability flags fall through in priority order, with the device model as the catch-all when none is set. We use
 * graceful map fallback (`?? cap` / `?? model`) so an unmapped key surfaces verbatim rather than the literal "undefined".
 *
 * @param option - The option entry whose `meta` scope to describe.
 *
 * @returns The full " <BR>*Supported on ...*" suffix, or `undefined` to omit it.
 */
export declare const describeOptionScope: (option: FeatureOptionEntry<ProtectOptionMeta>) => string | undefined;
export {};
//# sourceMappingURL=options.d.ts.map