import { z } from 'zod';
/**
 * Per-stage gating mode applied to the zones a rule references.
 *
 * - `include`: the rule contributes to a **whitelist** for its stage.
 *   When at least one `include` rule fires for a stage, only entities
 *   inside one of those zones pass that stage.
 * - `exclude`: the rule contributes to a **blacklist** for its stage.
 *   Entities inside one of those zones are dropped at that stage.
 *
 * `monitor`-style observation (count without filtering) is not a rule
 * mode — zones without any matching rule are observed naturally by
 * `zone-analytics` (live snapshot + history), so an "I just want to
 * count, not filter" use case needs no rule at all.
 */
export declare const ZoneRuleModeEnum: z.ZodEnum<{
    include: "include";
    exclude: "exclude";
}>;
export type ZoneRuleMode = z.infer<typeof ZoneRuleModeEnum>;
/**
 * Per-consumer rule that references existing zones (geometry) and
 * defines how a specific pipeline stage should treat them. Each
 * consumer addon owns its own `ZoneRule[]` array in its per-device
 * settings:
 *
 * - `addon-motion-wasm` → `motionZoneRules: ZoneRule[]` (motion stage)
 * - `addon-detection-pipeline` → `detectionZoneRules: ZoneRule[]` (detection stage)
 * - future: notification rules, audio gating, etc.
 *
 * One rule applies to N zones (`zoneIds[]`) so the operator can
 * express "ignore motion in ALL of {garden, street}" with a single
 * rule. `classFilter` narrows the rule to specific object classes —
 * "drop person detections in the street, but keep cars" is one
 * `exclude` rule with `classFilter: ['person']`.
 *
 * `enabled` is a soft toggle — the operator can keep the rule
 * configured but inert without deleting it.
 */
export declare const ZoneRuleSchema: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodOptional<z.ZodString>;
    zoneIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
    mode: z.ZodEnum<{
        include: "include";
        exclude: "exclude";
    }>;
    classFilter: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
    overlapThreshold: z.ZodOptional<z.ZodNumber>;
    bboxInclusionPct: z.ZodOptional<z.ZodNumber>;
    preferMask: z.ZodOptional<z.ZodBoolean>;
    enabled: z.ZodDefault<z.ZodBoolean>;
}, z.core.$strip>;
export type ZoneRule = z.infer<typeof ZoneRuleSchema>;
/**
 * Convenience array schema — used by addon device-settings
 * contributions and runtime payloads (e.g. `RunnerCameraConfig`).
 */
export declare const ZoneRulesArraySchema: z.ZodReadonly<z.ZodArray<z.ZodObject<{
    id: z.ZodString;
    name: z.ZodOptional<z.ZodString>;
    zoneIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
    mode: z.ZodEnum<{
        include: "include";
        exclude: "exclude";
    }>;
    classFilter: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
    overlapThreshold: z.ZodOptional<z.ZodNumber>;
    bboxInclusionPct: z.ZodOptional<z.ZodNumber>;
    preferMask: z.ZodOptional<z.ZodBoolean>;
    enabled: z.ZodDefault<z.ZodBoolean>;
}, z.core.$strip>>>;
export type ZoneRules = z.infer<typeof ZoneRulesArraySchema>;
//# sourceMappingURL=zone-rule.d.ts.map