# Unity-ROS2 System Docker Image
# Use official ROS2 Jazzy Desktop image as base
FROM osrf/ros:jazzy-desktop

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DOMAIN_ID=0
ENV RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ENV PYTHONUNBUFFERED=1
ENV ROS_DISTRO=jazzy

# Install additional system dependencies
RUN apt-get update && apt-get install -y \
    curl \
    wget \
    git \
    vim \
    nano \
    net-tools \
    iputils-ping \
    python3-pip \
    python3-dev \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# Install ROS2 related packages
RUN apt-get update && apt-get install -y \
    ros-jazzy-rosbridge-suite \
    ros-jazzy-moveit \
    ros-jazzy-moveit-planners \
    ros-jazzy-moveit-plugins \
    ros-jazzy-moveit-ros-planning-interface \
    ros-jazzy-moveit-servo \
    ros-jazzy-ros2-control \
    ros-jazzy-ros2-controllers \
    ros-jazzy-joint-state-publisher \
    ros-jazzy-joint-state-publisher-gui \
    ros-jazzy-robot-state-publisher \
    ros-jazzy-xacro \
    ros-jazzy-urdf \
    ros-jazzy-tf2-tools \
    ros-jazzy-rqt \
    ros-jazzy-rqt-common-plugins \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
RUN pip3 install --no-cache-dir --break-system-packages \
    numpy \
    scipy \
    matplotlib \
    transforms3d \
    roslibpy

# Create workspace and clone ROS-TCP-Endpoint
WORKDIR /ros2_ws
RUN mkdir -p /ros2_ws/src && \
    cd /ros2_ws/src && \
    git clone https://github.com/Unity-Technologies/ROS-TCP-Endpoint.git -b main-ros2

# Build ROS-TCP-Endpoint
RUN /bin/bash -c "source /opt/ros/jazzy/setup.bash && \
    cd /ros2_ws && \
    colcon build --packages-select ros_tcp_endpoint --symlink-install"

# Source ROS2 environment in bashrc for all sessions
RUN echo "source /opt/ros/jazzy/setup.bash" >> /root/.bashrc && \
    echo "if [ -f /ros2_ws/install/setup.bash ]; then source /ros2_ws/install/setup.bash; fi" >> /root/.bashrc

# Create startup script
RUN echo '#!/bin/bash\n\
source /opt/ros/jazzy/setup.bash\n\
if [ -f /ros2_ws/install/setup.bash ]; then\n\
    source /ros2_ws/install/setup.bash\n\
fi\n\
echo "ROS2 Jazzy environment ready"\n\
echo "ROS_DOMAIN_ID: $ROS_DOMAIN_ID"\n\
echo "RMW_IMPLEMENTATION: $RMW_IMPLEMENTATION"\n\
exec "$@"' > /entrypoint.sh && \
    chmod +x /entrypoint.sh

# Expose ports (TCP communication ports)
EXPOSE 10000-10010

# Set entry point
ENTRYPOINT ["/entrypoint.sh"]
CMD ["bash"]
