# 使用 ROS2 官方 Humble 基础镜像
FROM ros:humble-ros-base-jammy

ENV DEBIAN_FRONTEND=noninteractive

# 安装 C++ 编译依赖、SocketCAN 调试工具及 Eigen 等核心库
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    git \
    can-utils \
    libyaml-cpp-dev \
    libeigen3-dev \
    libusb-1.0-0-dev \
    libpcl-dev \
    libopencv-dev \
    ros-humble-navigation2 \
    ros-humble-nav2-bringup \
    ros-humble-pointcloud-to-laserscan \
    ros-humble-cv-bridge \
    ros-humble-pcl-conversions \
    wget \
    tar \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# ============================================================================
# ONNX Runtime — 架构自适应，aarch64 启用 CUDA GPU 加速
# ============================================================================
#   - Orin Nano (aarch64): pip 安装 onnxruntime-gpu（含 CUDA EP）
#   - x86_64 开发机: 下载 CPU-only 预编译包（GPU 不可用）
WORKDIR /opt
RUN ARCH=$(uname -m) && \
    if [ "$ARCH" = "aarch64" ]; then \
        echo "[ONNX] Installing CUDA-enabled ONNX Runtime for Jetson Orin..." && \
        pip3 install --no-cache-dir onnxruntime-gpu && \
        SITE_PKGS=$(python3 -c "import site; print(site.getsitepackages()[0])") && \
        mkdir -p onnxruntime/include onnxruntime/lib && \
        cp -r "$SITE_PKGS/onnxruntime/include/"* onnxruntime/include/ && \
        cp "$SITE_PKGS/onnxruntime/capi/libonnxruntime.so"* onnxruntime/lib/ && \
        echo "[ONNX] CUDA ONNX Runtime installed."; \
    else \
        echo "[ONNX] Installing CPU-only ONNX Runtime for x86_64 dev..." && \
        wget -q https://github.com/microsoft/onnxruntime/releases/download/v1.16.3/onnxruntime-linux-x64-1.16.3.tgz && \
        tar -zxf onnxruntime-linux-x64-1.16.3.tgz && \
        mv onnxruntime-linux-x64-1.16.3 onnxruntime && \
        rm onnxruntime-linux-x64-1.16.3.tgz; \
    fi

ENV ONNXRUNTIME_DIR=/opt/onnxruntime

# 创建工作空间，将所有 C++ 源码包拷入
WORKDIR /sim2real_ws/src
COPY src/sim2real_bringup sim2real_bringup
COPY src/sim2real_common sim2real_common
COPY src/sim2real_hw sim2real_hw
COPY src/sim2real_interfaces sim2real_interfaces
COPY src/sim2real_runtime sim2real_runtime
COPY src/odin_ros_driver odin_ros_driver
COPY src/sim2real_nav2 sim2real_nav2

# 拷贝策略文件与运行脚本
WORKDIR /sim2real_ws
COPY policies policies
COPY map map
COPY start_sim2real.sh start_sim2real.sh
RUN chmod +x start_sim2real.sh

# 编译 ROS2 工作空间
SHELL ["/bin/bash", "-c"]
RUN source /opt/ros/humble/setup.bash && \
    colcon build --merge-install --cmake-args -DCMAKE_BUILD_TYPE=Release

# 拷贝 Docker 入口脚本并设置
COPY docker_entrypoint.sh /docker_entrypoint.sh
RUN chmod +x /docker_entrypoint.sh

ENTRYPOINT ["/docker_entrypoint.sh"]
CMD ["./start_sim2real.sh"]
