FROM osrf/ros:humble-desktop-full

# Fix expired ROS 2 GPG key (avoid GPG errors in apt)
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
    -o /usr/share/keyrings/ros2-latest-archive-keyring.gpg

# Extra packages: graphics + tools + ROS 2 add-ons
RUN apt-get update && apt-get install -y --no-install-recommends \
    # X11 graphical support
    x11-apps \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libglu1-mesa \
    mesa-utils \
    libqt5x11extras5 \
    libxkbcommon-x11-0 \
    libx11-6 \
    libxext6 \
    libxrender1 \
    libxtst6 \
    # Dev tools
    build-essential \
    cmake \
    python3-colcon-common-extensions \
    python3-pip \
    wget unzip git iputils-ping \
    # ROS 2 add-ons
    ros-humble-rviz2 \
    ros-humble-joint-state-publisher \
    ros-humble-joint-state-publisher-gui \
    ros-humble-gazebo-ros-pkgs \
    ros-humble-gazebo-plugins \
    ros-humble-gazebo-ros2-control \
    ros-humble-nav2-bringup \
    ros-humble-nav2-simple-commander \
    ros-humble-tf-transformations \
    ros-humble-cartographer-ros \
    ros-humble-teleop-twist-keyboard \
    ros-humble-rmw-cyclonedds-cpp \
    ros-humble-rosbridge-server \
    # Gazebo Classic (Gazebo 11)
    gazebo \
    libgazebo-dev \
    && rm -rf /var/lib/apt/lists/*

# Optional: YOLO (uncomment and adapt if needed)
# RUN pip3 install --no-cache-dir ultralytics "numpy<1.24"

# Default ROS 2 environment in bashrc
RUN echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc \
    && echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> /root/.bashrc \
    && echo "export ROS_DOMAIN_ID=5" >> /root/.bashrc \
    && echo "export ROS_LOCALHOST_ONLY=0" >> /root/.bashrc \
    && echo "export CYCLONEDDS_URI=file:///config/cyclonedds_pc.xml" >> /root/.bashrc

# Keep container alive with an interactive shell
CMD ["bash"]
