import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import { DeviceType } from '../device/device-type.js';
/**
 * Generic on-screen-display (video overlay) cap. Each camera exposes
 * a firmware-defined list of overlays (channel name, timestamp,
 * watermark, logo, …); the cap models them as a homogeneous array of
 * descriptors so the admin UI can render them with zero per-firmware
 * code.
 */
export declare const OsdOverlayKindEnum: z.ZodEnum<{
    timestamp: "timestamp";
    text: "text";
    watermark: "watermark";
}>;
export type OsdOverlayKind = z.infer<typeof OsdOverlayKindEnum>;
export declare const OsdPositionEnum: z.ZodEnum<{
    custom: "custom";
    "top-left": "top-left";
    "top-center": "top-center";
    "top-right": "top-right";
    "bottom-left": "bottom-left";
    "bottom-center": "bottom-center";
    "bottom-right": "bottom-right";
}>;
export type OsdPosition = z.infer<typeof OsdPositionEnum>;
export declare const OsdOverlaySchema: z.ZodObject<{
    id: z.ZodString;
    kind: z.ZodEnum<{
        timestamp: "timestamp";
        text: "text";
        watermark: "watermark";
    }>;
    enabled: z.ZodBoolean;
    text: z.ZodOptional<z.ZodString>;
    position: z.ZodOptional<z.ZodEnum<{
        custom: "custom";
        "top-left": "top-left";
        "top-center": "top-center";
        "top-right": "top-right";
        "bottom-left": "bottom-left";
        "bottom-center": "bottom-center";
        "bottom-right": "bottom-right";
    }>>;
    availablePositions: z.ZodReadonly<z.ZodArray<z.ZodEnum<{
        custom: "custom";
        "top-left": "top-left";
        "top-center": "top-center";
        "top-right": "top-right";
        "bottom-left": "bottom-left";
        "bottom-center": "bottom-center";
        "bottom-right": "bottom-right";
    }>>>;
    readOnly: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
export type OsdOverlay = z.infer<typeof OsdOverlaySchema>;
export declare const OsdStatusSchema: z.ZodObject<{
    overlays: z.ZodReadonly<z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        kind: z.ZodEnum<{
            timestamp: "timestamp";
            text: "text";
            watermark: "watermark";
        }>;
        enabled: z.ZodBoolean;
        text: z.ZodOptional<z.ZodString>;
        position: z.ZodOptional<z.ZodEnum<{
            custom: "custom";
            "top-left": "top-left";
            "top-center": "top-center";
            "top-right": "top-right";
            "bottom-left": "bottom-left";
            "bottom-center": "bottom-center";
            "bottom-right": "bottom-right";
        }>>;
        availablePositions: z.ZodReadonly<z.ZodArray<z.ZodEnum<{
            custom: "custom";
            "top-left": "top-left";
            "top-center": "top-center";
            "top-right": "top-right";
            "bottom-left": "bottom-left";
            "bottom-center": "bottom-center";
            "bottom-right": "bottom-right";
        }>>>;
        readOnly: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>>>;
}, z.core.$strip>;
export type OsdStatus = z.infer<typeof OsdStatusSchema>;
declare const OsdOverlayPatchSchema: z.ZodObject<{
    enabled: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
    text: z.ZodOptional<z.ZodOptional<z.ZodString>>;
    position: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
        custom: "custom";
        "top-left": "top-left";
        "top-center": "top-center";
        "top-right": "top-right";
        "bottom-left": "bottom-left";
        "bottom-center": "bottom-center";
        "bottom-right": "bottom-right";
    }>>>;
}, z.core.$strip>;
export declare const osdCapability: {
    readonly name: "osd";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly deviceTypes: readonly [DeviceType.Camera];
    readonly methods: {
        /**
         * Patch a single overlay by id. Provider handles read-modify-write
         * against firmware APIs that require the full object (Reolink
         * `SetOsd`). Omitted patch keys are preserved. Successful
         * completion triggers `onStatusChanged`.
         */
        readonly setOverlay: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
            overlayId: z.ZodString;
            patch: z.ZodObject<{
                enabled: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
                text: z.ZodOptional<z.ZodOptional<z.ZodString>>;
                position: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
                    custom: "custom";
                    "top-left": "top-left";
                    "top-center": "top-center";
                    "top-right": "top-right";
                    "bottom-left": "bottom-left";
                    "bottom-center": "bottom-center";
                    "bottom-right": "bottom-right";
                }>>>;
            }, z.core.$strip>;
        }, z.core.$strip>, z.ZodVoid, "mutation">;
    };
    readonly events: {
        readonly onStatusChanged: {
            readonly data: z.ZodObject<{
                deviceId: z.ZodNumber;
                status: z.ZodObject<{
                    overlays: z.ZodReadonly<z.ZodArray<z.ZodObject<{
                        id: z.ZodString;
                        kind: z.ZodEnum<{
                            timestamp: "timestamp";
                            text: "text";
                            watermark: "watermark";
                        }>;
                        enabled: z.ZodBoolean;
                        text: z.ZodOptional<z.ZodString>;
                        position: z.ZodOptional<z.ZodEnum<{
                            custom: "custom";
                            "top-left": "top-left";
                            "top-center": "top-center";
                            "top-right": "top-right";
                            "bottom-left": "bottom-left";
                            "bottom-center": "bottom-center";
                            "bottom-right": "bottom-right";
                        }>>;
                        availablePositions: z.ZodReadonly<z.ZodArray<z.ZodEnum<{
                            custom: "custom";
                            "top-left": "top-left";
                            "top-center": "top-center";
                            "top-right": "top-right";
                            "bottom-left": "bottom-left";
                            "bottom-center": "bottom-center";
                            "bottom-right": "bottom-right";
                        }>>>;
                        readOnly: z.ZodOptional<z.ZodBoolean>;
                    }, z.core.$strip>>>;
                }, z.core.$strip>;
            }, z.core.$strip>;
        };
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            overlays: z.ZodReadonly<z.ZodArray<z.ZodObject<{
                id: z.ZodString;
                kind: z.ZodEnum<{
                    timestamp: "timestamp";
                    text: "text";
                    watermark: "watermark";
                }>;
                enabled: z.ZodBoolean;
                text: z.ZodOptional<z.ZodString>;
                position: z.ZodOptional<z.ZodEnum<{
                    custom: "custom";
                    "top-left": "top-left";
                    "top-center": "top-center";
                    "top-right": "top-right";
                    "bottom-left": "bottom-left";
                    "bottom-center": "bottom-center";
                    "bottom-right": "bottom-right";
                }>>;
                availablePositions: z.ZodReadonly<z.ZodArray<z.ZodEnum<{
                    custom: "custom";
                    "top-left": "top-left";
                    "top-center": "top-center";
                    "top-right": "top-right";
                    "bottom-left": "bottom-left";
                    "bottom-center": "bottom-center";
                    "bottom-right": "bottom-right";
                }>>>;
                readOnly: z.ZodOptional<z.ZodBoolean>;
            }, z.core.$strip>>>;
        }, z.core.$strip>;
        readonly kind: "command-driven";
    };
    readonly settings: {
        readonly bindings: readonly [{
            readonly kind: "array";
            readonly statusPath: "overlays";
            readonly idField: "id";
            readonly method: "setOverlay";
            readonly idArg: "overlayId";
            readonly patchArg: "patch";
            readonly sectionId: "osd";
            readonly sectionTitle: "Video overlays";
            readonly itemFields: {
                readonly enabled: {
                    readonly label: (o: Record<string, unknown>) => string;
                    readonly kind: "boolean";
                };
                readonly text: {
                    readonly label: (o: Record<string, unknown>) => string;
                    readonly kind: "text";
                    readonly when: (o: Record<string, unknown>) => boolean;
                };
                readonly position: {
                    readonly label: (o: Record<string, unknown>) => string;
                    readonly kind: "select";
                    readonly options: (o: Record<string, unknown>) => readonly string[];
                    readonly when: (o: Record<string, unknown>) => boolean;
                };
            };
        }];
    };
};
export type IOsdProvider = InferProvider<typeof osdCapability>;
export { OsdOverlayPatchSchema };
//# sourceMappingURL=osd.cap.d.ts.map