"""ROS1 visualization_msgs message definitions for noetic.

Auto-generated by scripts/generate_ros1_messages.py
Source: https://github.com/ros/common_msgs/tree/noetic-devel/visualization_msgs/msg
"""
from __future__ import annotations

from dataclasses import dataclass
from typing import Literal

import pybag.ros1.noetic.geometry_msgs as geometry_msgs
import pybag.ros1.noetic.std_msgs as std_msgs
import pybag.types as t


@dataclass(kw_only=True)
class ImageMarker:
    __msg_name__ = 'visualization_msgs/ImageMarker'

    CIRCLE: t.Constant[t.uint8] = 0
    LINE_STRIP: t.Constant[t.uint8] = 1
    LINE_LIST: t.Constant[t.uint8] = 2
    POLYGON: t.Constant[t.uint8] = 3
    POINTS: t.Constant[t.uint8] = 4
    ADD: t.Constant[t.uint8] = 0
    REMOVE: t.Constant[t.uint8] = 1
    header: std_msgs.Header
    ns: t.string
    id: t.int32
    type: t.int32
    action: t.int32
    position: geometry_msgs.Point
    scale: t.float32
    outline_color: std_msgs.ColorRGBA
    filled: t.uint8
    fill_color: std_msgs.ColorRGBA
    lifetime: t.ros1.duration
    points: t.Array[geometry_msgs.Point]
    outline_colors: t.Array[std_msgs.ColorRGBA]


@dataclass(kw_only=True)
class InteractiveMarkerFeedback:
    __msg_name__ = 'visualization_msgs/InteractiveMarkerFeedback'

    KEEP_ALIVE: t.Constant[t.uint8] = 0
    POSE_UPDATE: t.Constant[t.uint8] = 1
    MENU_SELECT: t.Constant[t.uint8] = 2
    BUTTON_CLICK: t.Constant[t.uint8] = 3
    MOUSE_DOWN: t.Constant[t.uint8] = 4
    MOUSE_UP: t.Constant[t.uint8] = 5
    header: std_msgs.Header
    client_id: t.string
    marker_name: t.string
    control_name: t.string
    event_type: t.uint8
    pose: geometry_msgs.Pose
    menu_entry_id: t.uint32
    mouse_point: geometry_msgs.Point
    mouse_point_valid: t.bool


@dataclass(kw_only=True)
class InteractiveMarkerPose:
    __msg_name__ = 'visualization_msgs/InteractiveMarkerPose'

    header: std_msgs.Header
    pose: geometry_msgs.Pose
    name: t.string


@dataclass(kw_only=True)
class Marker:
    __msg_name__ = 'visualization_msgs/Marker'

    ARROW: t.Constant[t.uint8] = 0
    CUBE: t.Constant[t.uint8] = 1
    SPHERE: t.Constant[t.uint8] = 2
    CYLINDER: t.Constant[t.uint8] = 3
    LINE_STRIP: t.Constant[t.uint8] = 4
    LINE_LIST: t.Constant[t.uint8] = 5
    CUBE_LIST: t.Constant[t.uint8] = 6
    SPHERE_LIST: t.Constant[t.uint8] = 7
    POINTS: t.Constant[t.uint8] = 8
    TEXT_VIEW_FACING: t.Constant[t.uint8] = 9
    MESH_RESOURCE: t.Constant[t.uint8] = 10
    TRIANGLE_LIST: t.Constant[t.uint8] = 11
    ADD: t.Constant[t.uint8] = 0
    MODIFY: t.Constant[t.uint8] = 0
    DELETE: t.Constant[t.uint8] = 2
    DELETEALL: t.Constant[t.uint8] = 3
    header: std_msgs.Header
    ns: t.string
    id: t.int32
    type: t.int32
    action: t.int32
    pose: geometry_msgs.Pose
    scale: geometry_msgs.Vector3
    color: std_msgs.ColorRGBA
    lifetime: t.ros1.duration
    frame_locked: t.bool
    points: t.Array[geometry_msgs.Point]
    colors: t.Array[std_msgs.ColorRGBA]
    text: t.string
    mesh_resource: t.string
    mesh_use_embedded_materials: t.bool


@dataclass(kw_only=True)
class MenuEntry:
    __msg_name__ = 'visualization_msgs/MenuEntry'

    FEEDBACK: t.Constant[t.uint8] = 0
    ROSRUN: t.Constant[t.uint8] = 1
    ROSLAUNCH: t.Constant[t.uint8] = 2
    id: t.uint32
    parent_id: t.uint32
    title: t.string
    command: t.string
    command_type: t.uint8


@dataclass(kw_only=True)
class InteractiveMarkerControl:
    __msg_name__ = 'visualization_msgs/InteractiveMarkerControl'

    INHERIT: t.Constant[t.uint8] = 0
    FIXED: t.Constant[t.uint8] = 1
    VIEW_FACING: t.Constant[t.uint8] = 2
    NONE: t.Constant[t.uint8] = 0
    MENU: t.Constant[t.uint8] = 1
    BUTTON: t.Constant[t.uint8] = 2
    MOVE_AXIS: t.Constant[t.uint8] = 3
    MOVE_PLANE: t.Constant[t.uint8] = 4
    ROTATE_AXIS: t.Constant[t.uint8] = 5
    MOVE_ROTATE: t.Constant[t.uint8] = 6
    MOVE_3D: t.Constant[t.uint8] = 7
    ROTATE_3D: t.Constant[t.uint8] = 8
    MOVE_ROTATE_3D: t.Constant[t.uint8] = 9
    name: t.string
    orientation: geometry_msgs.Quaternion
    orientation_mode: t.uint8
    interaction_mode: t.uint8
    always_visible: t.bool
    markers: t.Array[Marker]
    independent_marker_orientation: t.bool
    description: t.string


@dataclass(kw_only=True)
class MarkerArray:
    __msg_name__ = 'visualization_msgs/MarkerArray'

    markers: t.Array[Marker]


@dataclass(kw_only=True)
class InteractiveMarker:
    __msg_name__ = 'visualization_msgs/InteractiveMarker'

    header: std_msgs.Header
    pose: geometry_msgs.Pose
    name: t.string
    description: t.string
    scale: t.float32
    menu_entries: t.Array[MenuEntry]
    controls: t.Array[InteractiveMarkerControl]


@dataclass(kw_only=True)
class InteractiveMarkerInit:
    __msg_name__ = 'visualization_msgs/InteractiveMarkerInit'

    server_id: t.string
    seq_num: t.uint64
    markers: t.Array[InteractiveMarker]


@dataclass(kw_only=True)
class InteractiveMarkerUpdate:
    __msg_name__ = 'visualization_msgs/InteractiveMarkerUpdate'

    KEEP_ALIVE: t.Constant[t.uint8] = 0
    UPDATE: t.Constant[t.uint8] = 1
    server_id: t.string
    seq_num: t.uint64
    type: t.uint8
    markers: t.Array[InteractiveMarker]
    poses: t.Array[InteractiveMarkerPose]
    erases: t.Array[t.string]
