"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import bf_proto.percept.common.geometric_shapes_pb2
import bf_proto.percept.common.geometry_pb2
import builtins
import google.protobuf.descriptor
import google.protobuf.message
import typing
import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ...

class ZoneAlgorithm(google.protobuf.message.Message):
    """*
    An algorithm that performs a set of instructions.
    Algorithm binds a name and a set of internal states to a zone.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    class CurrentObjectsCounter(google.protobuf.message.Message):
        """*
        Algorithm that counts the number of objects in a zone.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class PassThroughCounter(google.protobuf.message.Message):
        """*
        Algorithm that counts the number of objects entering or exiting a zone.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        INBOUND_FIELD_NUMBER: builtins.int
        ACCUMULATE_COUNT_FIELD_NUMBER: builtins.int
        @property
        def inbound(self) -> bf_proto.percept.common.geometry_pb2.Axis:
            """The Inbound Direction, that is defined by the axis of"""
            pass
        accumulate_count: builtins.bool = ...
        """the zone's pose.
        If the count in entry/exit directions is accumulated or not.
        """

        def __init__(self,
            *,
            inbound : typing.Optional[bf_proto.percept.common.geometry_pb2.Axis] = ...,
            accumulate_count : builtins.bool = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"inbound",b"inbound"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"accumulate_count",b"accumulate_count",u"inbound",b"inbound"]) -> None: ...

    class AppearanceDisappearanceCounter(google.protobuf.message.Message):
        """*
        Algorithm that counts the number of objects appearing or disappearing
        in a zone.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        ACCUMULATE_COUNT_FIELD_NUMBER: builtins.int
        accumulate_count: builtins.bool = ...
        """If the count in the two directions is accumulated or not."""

        def __init__(self,
            *,
            accumulate_count : builtins.bool = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"accumulate_count",b"accumulate_count"]) -> None: ...

    class Security(google.protobuf.message.Message):
        """*
        Algorithm that triggers an alarm if movement was detected in the zone
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        MIN_POINTS_FIELD_NUMBER: builtins.int
        min_points: builtins.int = ...
        """Minimum number of points in a security zone to trigger the detection. Default: 10"""

        def __init__(self,
            *,
            min_points : builtins.int = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"min_points",b"min_points"]) -> None: ...

    class Occupancy(google.protobuf.message.Message):
        """*
        Algorithm that detectes if a zone is occupied
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        MIN_POINTS_FIELD_NUMBER: builtins.int
        min_points: builtins.int = ...
        """Minimum number of points in a occupancy zone to trigger the detection. Default: 10"""

        def __init__(self,
            *,
            min_points : builtins.int = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"min_points",b"min_points"]) -> None: ...

    class Volume(google.protobuf.message.Message):
        """*
        Algorithm that measure the volume of a zone
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        RESOLUTION_FIELD_NUMBER: builtins.int
        EMPTY_VOLUME_FIELD_NUMBER: builtins.int
        resolution: builtins.float = ...
        """Grid resolution per tile used to measure the volume. Default: 0.1"""

        empty_volume: builtins.float = ...
        """Empty Volume of the scene, this is substracted from the measured volume to get the"""

        def __init__(self,
            *,
            resolution : builtins.float = ...,
            empty_volume : builtins.float = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"empty_volume",b"empty_volume",u"resolution",b"resolution"]) -> None: ...

    NAME_FIELD_NUMBER: builtins.int
    UUID_FIELD_NUMBER: builtins.int
    SHAPE_FIELD_NUMBER: builtins.int
    CURRENT_OBJECTS_COUNTER_FIELD_NUMBER: builtins.int
    PASS_THROUGH_COUNTER_FIELD_NUMBER: builtins.int
    APPEARANCE_DISAPPEARANCE_COUNTER_FIELD_NUMBER: builtins.int
    SECURITY_FIELD_NUMBER: builtins.int
    OCCUPANCY_FIELD_NUMBER: builtins.int
    VOLUME_FIELD_NUMBER: builtins.int
    name: typing.Text = ...
    """Zone Algorithm name."""

    uuid: typing.Text = ...
    """Zone Algorithm UUID."""

    @property
    def shape(self) -> bf_proto.percept.common.geometric_shapes_pb2.Shape:
        """Geometric shape (usually a Box) in which the algorithm detects certain behaviors/scenarios."""
        pass
    @property
    def current_objects_counter(self) -> global___ZoneAlgorithm.CurrentObjectsCounter: ...
    @property
    def pass_through_counter(self) -> global___ZoneAlgorithm.PassThroughCounter: ...
    @property
    def appearance_disappearance_counter(self) -> global___ZoneAlgorithm.AppearanceDisappearanceCounter: ...
    @property
    def security(self) -> global___ZoneAlgorithm.Security: ...
    @property
    def occupancy(self) -> global___ZoneAlgorithm.Occupancy: ...
    @property
    def volume(self) -> global___ZoneAlgorithm.Volume: ...
    def __init__(self,
        *,
        name : typing.Text = ...,
        uuid : typing.Text = ...,
        shape : typing.Optional[bf_proto.percept.common.geometric_shapes_pb2.Shape] = ...,
        current_objects_counter : typing.Optional[global___ZoneAlgorithm.CurrentObjectsCounter] = ...,
        pass_through_counter : typing.Optional[global___ZoneAlgorithm.PassThroughCounter] = ...,
        appearance_disappearance_counter : typing.Optional[global___ZoneAlgorithm.AppearanceDisappearanceCounter] = ...,
        security : typing.Optional[global___ZoneAlgorithm.Security] = ...,
        occupancy : typing.Optional[global___ZoneAlgorithm.Occupancy] = ...,
        volume : typing.Optional[global___ZoneAlgorithm.Volume] = ...,
        ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal[u"algorithm_type",b"algorithm_type",u"appearance_disappearance_counter",b"appearance_disappearance_counter",u"current_objects_counter",b"current_objects_counter",u"occupancy",b"occupancy",u"pass_through_counter",b"pass_through_counter",u"security",b"security",u"shape",b"shape",u"volume",b"volume"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"algorithm_type",b"algorithm_type",u"appearance_disappearance_counter",b"appearance_disappearance_counter",u"current_objects_counter",b"current_objects_counter",u"name",b"name",u"occupancy",b"occupancy",u"pass_through_counter",b"pass_through_counter",u"security",b"security",u"shape",b"shape",u"uuid",b"uuid",u"volume",b"volume"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal[u"algorithm_type",b"algorithm_type"]) -> typing.Optional[typing_extensions.Literal["current_objects_counter","pass_through_counter","appearance_disappearance_counter","security","occupancy","volume"]]: ...
global___ZoneAlgorithm = ZoneAlgorithm
