#!/usr/bin/env python3

"""
Foxglove Bridge Launch File

Launches foxglove_bridge WebSocket server for Foxglove Studio visualization.
Configuration loaded from foxglove_config.yaml (standard ROS2 parameter format).

Override config via volume mount in docker-compose:
  volumes:
    - ./foxglove_config.yaml:/app/colcon_ws/install/nav_launch/share/nav_launch/config/foxglove_config.yaml
"""

import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node


def generate_launch_description():
    package_share_directory = get_package_share_directory("nav_launch")

    foxglove_config_file = os.path.join(
        package_share_directory, "config", "foxglove_config.yaml"
    )

    declare_port_arg = DeclareLaunchArgument(
        "port",
        default_value="8765",
        description="Foxglove Bridge WebSocket port",
    )

    declare_use_sim_time_arg = DeclareLaunchArgument(
        "use_sim_time",
        default_value="false",
        description="Use simulation time from /clock topic",
    )

    foxglove_bridge_node = Node(
        package="foxglove_bridge",
        executable="foxglove_bridge",
        name="foxglove_bridge",
        output="screen",
        parameters=[
            foxglove_config_file,
            {
                "port": LaunchConfiguration("port"),
                "use_sim_time": LaunchConfiguration("use_sim_time"),
            },
        ],
    )

    ld = LaunchDescription()
    ld.add_action(declare_port_arg)
    ld.add_action(declare_use_sim_time_arg)
    ld.add_action(foxglove_bridge_node)
    return ld
