import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import { DeviceType } from '../device/device-type.js';
/**
 * Hardware / firmware motion sensor cap — binary detected state plus
 * a timestamp of the last observation. Distinct from
 * `motion-detection.cap.ts` which owns the LOCAL ML motion pipeline;
 * `motion` is the lightweight readout from on-camera motion (Reolink
 * `GetMdState`, Baichuan push `type: motion`, ONVIF analytics).
 *
 * Native-motion providers also fan out to `detection.camera-native`
 * with `source: 'onboard'` so cross-cutting system services
 * (alert-center, advanced-notifier) can subscribe once and receive
 * motion from every camera.
 */
export declare const MotionStatusSchema: z.ZodObject<{
    detected: z.ZodBoolean;
    lastDetectedAt: z.ZodNullable<z.ZodNumber>;
    autoClearAfterMs: z.ZodNullable<z.ZodNumber>;
}, z.core.$strip>;
export type MotionStatus = z.infer<typeof MotionStatusSchema>;
/**
 * Payload of `motion.onMotionChanged` event + the corresponding bus
 * event `EventCategory.MotionOnMotionChanged`. Single source of truth
 * — both the cap event surface and the bus payload type alias to this
 * schema.
 */
export declare const MotionOnMotionChangedDataSchema: z.ZodObject<{
    deviceId: z.ZodNumber;
    detected: z.ZodBoolean;
    timestamp: z.ZodNumber;
    source: z.ZodEnum<{
        onboard: "onboard";
        analyzer: "analyzer";
    }>;
    regions: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
        bbox: z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            w: z.ZodNumber;
            h: z.ZodNumber;
        }, z.core.$strip>;
        pixelCount: z.ZodNumber;
        intensity: z.ZodNumber;
    }, z.core.$strip>>>>;
}, z.core.$strip>;
export type MotionOnMotionChangedData = z.infer<typeof MotionOnMotionChangedDataSchema>;
export declare const motionCapability: {
    readonly name: "motion";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly deviceTypes: readonly [DeviceType.Camera, DeviceType.Sensor];
    readonly methods: {
        /**
         * Pull the current motion state synchronously. Convenience shortcut
         * for consumers that don't need the full status object; equivalent
         * to `getStatus()?.detected ?? false`. Will likely be folded into
         * `getStatus` once the auto-injected status surface lands in every
         * consumer.
         */
        readonly isDetected: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
        }, z.core.$strip>, z.ZodBoolean, import("./capability-definition.js").CapabilityMethodKind>;
    };
    readonly events: {
        /**
         * Fires every time the runner transitions a camera between
         * `watching` and `active` phases. `source` carries which motion
         * path drove the transition; `regions` is populated only for
         * `source: 'analyzer'` (frame-diff regions from the ML motion
         * detector) — onboard sources don't carry per-frame regions
         * here (camera-provided zones / AI metadata live in dedicated
         * channels: `detection.camera-native`, future zone capability).
         *
         * Consumers that want all motion pushes (even with `detected`
         * unchanged) should subscribe to the status subscription via
         * `device-manager.subscribeDeviceStatusAggregate` instead.
         */
        readonly onMotionChanged: {
            readonly data: z.ZodObject<{
                deviceId: z.ZodNumber;
                detected: z.ZodBoolean;
                timestamp: z.ZodNumber;
                source: z.ZodEnum<{
                    onboard: "onboard";
                    analyzer: "analyzer";
                }>;
                regions: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
                    bbox: z.ZodObject<{
                        x: z.ZodNumber;
                        y: z.ZodNumber;
                        w: z.ZodNumber;
                        h: z.ZodNumber;
                    }, z.core.$strip>;
                    pixelCount: z.ZodNumber;
                    intensity: z.ZodNumber;
                }, z.core.$strip>>>>;
            }, z.core.$strip>;
        };
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            detected: z.ZodBoolean;
            lastDetectedAt: z.ZodNullable<z.ZodNumber>;
            autoClearAfterMs: z.ZodNullable<z.ZodNumber>;
        }, z.core.$strip>;
        readonly kind: "push";
    };
    /**
     * Runtime-state slice — the last observed motion snapshot, mirrored
     * by the kernel and readable cross-process via
     * `device.state.motion.value`. Reads never invoke the provider, so
     * UIs and other addons can poll the cached state safely.
     */
    readonly runtimeState: z.ZodObject<{
        detected: z.ZodBoolean;
        lastDetectedAt: z.ZodNullable<z.ZodNumber>;
        autoClearAfterMs: z.ZodNullable<z.ZodNumber>;
    }, z.core.$strip>;
};
export type IMotionProvider = InferProvider<typeof motionCapability>;
//# sourceMappingURL=motion.cap.d.ts.map