import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import { DeviceType } from '../device/device-type.js';
export declare const PtzAutotrackSettingsSchema: z.ZodObject<{
    targetType: z.ZodString;
    stopDelaySeconds: z.ZodNumber;
    disappearDelaySeconds: z.ZodNumber;
}, z.core.$strip>;
export type PtzAutotrackSettings = z.infer<typeof PtzAutotrackSettingsSchema>;
/**
 * One option the camera advertises as a valid `targetType`. Drivers
 * harvest this from their probe data; the UI renders these as the
 * `targetType` select options. Empty array = the camera doesn't
 * expose a target-type selector (auto-only).
 *
 * The `value` is the canonical wire string the cap accepts in
 * `setSettings({targetType})` — drivers use it verbatim when pushing
 * to firmware. The `label` is operator-facing English (translated
 * client-side if the UI supports i18n).
 */
export declare const PtzAutotrackTargetOptionSchema: z.ZodObject<{
    value: z.ZodString;
    label: z.ZodString;
}, z.core.$strip>;
export type PtzAutotrackTargetOption = z.infer<typeof PtzAutotrackTargetOptionSchema>;
export declare const PtzAutotrackStatusSchema: z.ZodObject<{
    enabled: z.ZodBoolean;
    lastChangedAt: z.ZodNumber;
    currentSettings: z.ZodNullable<z.ZodObject<{
        targetType: z.ZodString;
        stopDelaySeconds: z.ZodNumber;
        disappearDelaySeconds: z.ZodNumber;
    }, z.core.$strip>>;
    supportedTargetTypes: z.ZodArray<z.ZodObject<{
        value: z.ZodString;
        label: z.ZodString;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type PtzAutotrackStatus = z.infer<typeof PtzAutotrackStatusSchema>;
/**
 * Runtime-state slice owned by this cap. Persists the last-known
 * camera-derived snapshot across restarts, so cold-start callers
 * have a meaningful baseline even before the first refresh round-trip.
 *
 * Adds `lastFetchedAt` on top of the status shape so the framework
 * (or the provider) can stale-check before deciding whether to
 * round-trip the camera again.
 */
export declare const PtzAutotrackRuntimeStateSchema: z.ZodObject<{
    enabled: z.ZodBoolean;
    lastChangedAt: z.ZodNumber;
    currentSettings: z.ZodNullable<z.ZodObject<{
        targetType: z.ZodString;
        stopDelaySeconds: z.ZodNumber;
        disappearDelaySeconds: z.ZodNumber;
    }, z.core.$strip>>;
    supportedTargetTypes: z.ZodArray<z.ZodObject<{
        value: z.ZodString;
        label: z.ZodString;
    }, z.core.$strip>>;
    lastFetchedAt: z.ZodNumber;
}, z.core.$strip>;
export type PtzAutotrackRuntimeState = z.infer<typeof PtzAutotrackRuntimeStateSchema>;
export declare const ptzAutotrackCapability: {
    readonly name: "ptz-autotrack";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly deviceTypes: readonly [DeviceType.Camera];
    readonly methods: {
        /**
         * Read the current on/off state + last-applied settings.
         * Drivers may serve from a cache + refresh on a schedule —
         * callers should NOT poll faster than ~5s.
         */
        readonly getStatus: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
        }, z.core.$strip>, z.ZodObject<{
            enabled: z.ZodBoolean;
            lastChangedAt: z.ZodNumber;
            currentSettings: z.ZodNullable<z.ZodObject<{
                targetType: z.ZodString;
                stopDelaySeconds: z.ZodNumber;
                disappearDelaySeconds: z.ZodNumber;
            }, z.core.$strip>>;
            supportedTargetTypes: z.ZodArray<z.ZodObject<{
                value: z.ZodString;
                label: z.ZodString;
            }, z.core.$strip>>;
        }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
        /**
         * Arm or disarm autotrack. Resolves once the camera has
         * acknowledged the transition; the `onStatusChanged` event
         * fires shortly after with the live state.
         */
        readonly setEnabled: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
            enabled: z.ZodBoolean;
        }, z.core.$strip>, z.ZodVoid, "mutation">;
        /**
         * Read settings (target type + delays). Mirrors the
         * `getStatus().currentSettings` payload but exposes it as a
         * standalone read for callers that want settings without the
         * status surface around them. `null` until the driver has
         * harvested the firmware state at least once.
         */
        readonly getSettings: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
        }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
            targetType: z.ZodString;
            stopDelaySeconds: z.ZodNumber;
            disappearDelaySeconds: z.ZodNumber;
        }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
        /**
         * Update one or more settings. Partial — keys that aren't
         * supplied keep their last persisted value. The driver is
         * responsible for clamping vendor-specific ranges if narrower
         * than the cross-vendor max declared on the schema.
         */
        readonly setSettings: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
            settings: z.ZodObject<{
                targetType: z.ZodOptional<z.ZodString>;
                stopDelaySeconds: z.ZodOptional<z.ZodNumber>;
                disappearDelaySeconds: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>;
        }, z.core.$strip>, z.ZodVoid, "mutation">;
    };
    readonly events: {
        readonly onStatusChanged: {
            readonly data: z.ZodObject<{
                deviceId: z.ZodNumber;
                status: z.ZodObject<{
                    enabled: z.ZodBoolean;
                    lastChangedAt: z.ZodNumber;
                    currentSettings: z.ZodNullable<z.ZodObject<{
                        targetType: z.ZodString;
                        stopDelaySeconds: z.ZodNumber;
                        disappearDelaySeconds: z.ZodNumber;
                    }, z.core.$strip>>;
                    supportedTargetTypes: z.ZodArray<z.ZodObject<{
                        value: z.ZodString;
                        label: z.ZodString;
                    }, z.core.$strip>>;
                }, z.core.$strip>;
            }, z.core.$strip>;
        };
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            enabled: z.ZodBoolean;
            lastChangedAt: z.ZodNumber;
            currentSettings: z.ZodNullable<z.ZodObject<{
                targetType: z.ZodString;
                stopDelaySeconds: z.ZodNumber;
                disappearDelaySeconds: z.ZodNumber;
            }, z.core.$strip>>;
            supportedTargetTypes: z.ZodArray<z.ZodObject<{
                value: z.ZodString;
                label: z.ZodString;
            }, z.core.$strip>>;
        }, z.core.$strip>;
        readonly kind: "command-driven";
    };
    /**
     * Persistent slice mirrored across restarts. The provider writes
     * here on every successful firmware fetch / settings push;
     * `getStatus` and `getSettings` then read this snapshot synchronously
     * with a stale-driven async refresh in the background. Keeps the
     * fetch / cache / fallback logic out of the four cap methods —
     * they become trampolines over `runtimeState`.
     */
    readonly runtimeState: z.ZodObject<{
        enabled: z.ZodBoolean;
        lastChangedAt: z.ZodNumber;
        currentSettings: z.ZodNullable<z.ZodObject<{
            targetType: z.ZodString;
            stopDelaySeconds: z.ZodNumber;
            disappearDelaySeconds: z.ZodNumber;
        }, z.core.$strip>>;
        supportedTargetTypes: z.ZodArray<z.ZodObject<{
            value: z.ZodString;
            label: z.ZodString;
        }, z.core.$strip>>;
        lastFetchedAt: z.ZodNumber;
    }, z.core.$strip>;
};
export type IPtzAutotrackProvider = InferProvider<typeof ptzAutotrackCapability>;
//# sourceMappingURL=ptz-autotrack.cap.d.ts.map