"""Launch the full 3D tracking + ground-plane estimation + image overlay pipeline.

Nodes started:
  1. single_person_loc_node  -- headless keypoint triangulator
       publishes: /keypoint_markers  (MarkerArray)
                  /keypoints_3d      (PointCloud2)
  2. ground_plane_node       -- ground-plane estimator
       publishes: /ground_plane_markers  (MarkerArray)
                  /ground_plane_pose     (PoseStamped)
  3. overlay_node            -- undistorted image with plane grid + skeleton
       publishes: /overlay_image         (Image)

To view the annotated image:
  ros2 run rqt_image_view rqt_image_view   →   select /overlay_image
"""

import os
from launch import LaunchDescription
from launch.actions import ExecuteProcess


def generate_launch_description():
    python_exe = os.path.expanduser(
        '~/miniconda3/envs/mmpose/bin/python3'
    )

    return LaunchDescription([

        # ── 1. Keypoint triangulator (headless) ─────────────────────────
        ExecuteProcess(
            cmd=[
                python_exe, '-m', 'tracking_re_id.single_person_loc_node',
                '--ros-args',
                '-p', 'threshold:=0.3',
                '-p', 'device:=cuda:0',
                '-p', 'max_residual:=0.10',
                '-p', 'headless:=true',
            ],
            output='screen',
            env={**os.environ},
        ),

        # ── 2. Ground-plane estimator ────────────────────────────────────
        ExecuteProcess(
            cmd=[
                python_exe, '-m', 'tracking_re_id.ground_plane_node',
                '--ros-args',
                '-p', 'stable_frames:=5',
                '-p', 'stable_radius:=0.05',
                '-p', 'duplicate_radius:=0',
                '-p', 'collinearity_threshold:=0.25',
                '-p', 'max_ground_points:=100',
                '-p', 'min_plane_points:=5',
            ],
            output='screen',
            env={**os.environ},
        ),

        # ── 3. Image overlay (undistorted image + plane grid + skeleton) ──
        ExecuteProcess(
            cmd=[
                python_exe, '-m', 'tracking_re_id.overlay_node',
                '--ros-args',
            ],
            output='screen',
            env={**os.environ},
        ),

    ])
