FROM node:20-bookworm-slim AS web-builder

WORKDIR /web
COPY web-vue/package.json ./
RUN npm install

COPY web-vue/ ./
RUN npm run build

FROM ubuntu:24.04 AS builder

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    pkg-config \
    qtbase5-dev \
    qt5-qmake \
    qtdeclarative5-dev \
    libqt5opengl5-dev \
    libpcl-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY . .

RUN mkdir -p build && cd build \
    && qmake ../DotsToSirface.pro 'DEFINES+=PCL_ENABLED' \
    && make -j"$(nproc)"

FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive
ENV DOTSTOSIRFACE_BIN=/usr/local/bin/DotsToSirface
ENV PIPELINE_CONFIG=/app/docker/default_pipeline.json
ENV USER_PRESETS_DIR=/app/data/user-presets
ENV PYTHONUNBUFFERED=1

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 \
    python3-pip \
    python3-venv \
    libqt5core5t64 \
    libqt5gui5t64 \
    libqt5widgets5t64 \
    libqt5opengl5t64 \
    libqt5qml5 \
    libqt5quick5 \
    libqt5quickwidgets5 \
    libqt5network5t64 \
    libpcl-common1.14 \
    libpcl-io1.14 \
    libpcl-filters1.14 \
    libpcl-features1.14 \
    libpcl-kdtree1.14 \
    libpcl-search1.14 \
    libpcl-surface1.14 \
    libgl1 \
  && rm -rf /var/lib/apt/lists/*

COPY --from=builder /src/build/DotsToSirface /usr/local/bin/DotsToSirface
COPY --from=web-builder /web/dist /app/web-vue/dist
COPY api /app/api
COPY docker /app/docker
COPY presets /app/presets

WORKDIR /app/api
RUN python3 -m venv /opt/venv \
    && /opt/venv/bin/pip install --no-cache-dir -r requirements.txt

ENV PATH="/opt/venv/bin:${PATH}"

EXPOSE 8080

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
