FROM ros:jazzy-perception

ENV DEBIAN_FRONTEND=noninteractive

# ---------- System dependencies ----------
RUN apt-get update && apt-get upgrade && apt-get install -y \
    python3-colcon-common-extensions \
    python3-rosdep \
    meson cmake \
    build-essential \
    udev \
    git

# ---------- Libcamera ----------

WORKDIR /extras

RUN apt-get install -y libboost-dev \
    libgnutls28-dev openssl libtiff5-dev \
    pybind11-dev \
    qtbase5-dev libqt5core5a libqt5gui5 libqt5widgets5 \
    python3-yaml python3-ply python3-jinja2 python3-pip\
    libglib2.0-dev libgstreamer-plugins-base1.0-dev \
    build-essential

RUN git clone https://github.com/raspberrypi/libcamera.git \
    && cd libcamera \
    && meson setup build --buildtype=release -Dpipelines=rpi/vc4,rpi/pisp -Dipas=rpi/vc4,rpi/pisp -Dv4l2=true -Dgstreamer=enabled -Dtest=false -Dlc-compliance=disabled -Dcam=disabled -Dqcam=disabled -Ddocumentation=disabled -Dpycamera=enabled \
    && ninja -C build install

# ---------- Initialize rosdep ----------
RUN rosdep init || true
RUN rosdep update

# ---------- Workspace ----------
WORKDIR /ros_ws

# ---------- Copy package.xml files ----------
COPY toid_bot_description/package.xml    toid_bot_description/package.xml
COPY toid_control/package.xml            toid_control/package.xml
COPY toid_msgs/package.xml               toid_msgs/package.xml
COPY toid_odometry/package.xml           toid_odometry/package.xml
COPY toid_lidar/package.xml              toid_lidar/package.xml
COPY toid_interaction/package.xml        toid_interaction/package.xml
COPY toid_costmaps/package.xml           toid_costmaps/package.xml
COPY toid_bt/package.xml                 toid_bt/package.xml
COPY toid_spinner_controller/package.xml toid_spinner_controller/package.xml
COPY toid_behaviors/package.xml          toid_behaviors/package.xml
COPY toid_navigation/package.xml         toid_navigation/package.xml
COPY toid_vision/package.xml             toid_vision/package.xml
COPY ext/camera_ros/package.xml          ext/camera_ros/package.xml
COPY ext/BehaviorTree.ROS2/              ext/BehaviorTree.ROS2/

# ---------- Install dependencies ----------
RUN . /opt/ros/jazzy/setup.sh && \
    rosdep install --from-paths ./ --ignore-src -r -y --skip-keys=libcamera \
    && rm -rf /var/lib/apt/lists/*

RUN rm -rf ./*

RUN cat <<EOF >> /root/.bashrc
source /opt/ros/jazzy/setup.bash
if [[ -f ./install/setup.bash ]]; then
    source ./install/setup.bash
fi
EOF


CMD ["sleep", "infinity"]
