FROM debian:bookworm AS builder

# Build-time dependencies
RUN apt-get update -yqq && apt-get install -yqq \
    ca-certificates \
    build-essential \
    cmake \
    pkg-config \
    qtbase5-dev \
    libboost-dev \
    libasound2-dev \
    libssl-dev \
    libspeechd-dev \
    libzeroc-ice-dev \
    libpulse-dev \
    libcap-dev \
    libprotobuf-dev \
    libprotoc-dev \
    protobuf-compiler \
    protobuf-compiler-grpc \
    libgrpc++-dev \
    libogg-dev \
    libavahi-compat-libdnssd-dev \
    libsndfile1-dev \
    libbz2-dev \
    libxi-dev \
    git --no-install-recommends

WORKDIR /usr/src/mumble
RUN \
    git clone https://github.com/mumble-voip/mumble.git . \
    && git checkout master \
    && git submodule init \
    && git submodule update

WORKDIR /usr/src/mumble/build
RUN \
    cmake -Dclient=OFF -DCMAKE_BUILD_TYPE=Release -Dgrpc=ON .. \
    && make -j $(nproc)

FROM debian:bookworm
EXPOSE 64738/tcp 64738/udp

ENV HOME /home/user
RUN useradd --create-home --home-dir $HOME user \
    && chown -R user:user $HOME

WORKDIR $HOME

# Runtime dependencies
RUN apt-get update && apt-get install -yqq \
    ca-certificates \
    'libprotobuf[0-9]+$' \
    libqt5core5a \
    libqt5dbus5 \
    libqt5xml5 \
    libqt5sql5 \
    libavahi-compat-libdnssd1 \
    libqt5network5 \
    libcap2 \
    'libgrpc[0-9]+$' \
    libgrpc++1 \
    libzeroc-ice3.7 \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/src/mumble/build/mumble-server /usr/bin/mumble-server

USER user

COPY --from=builder --chown=user:user /usr/src/mumble/auxiliary_files/mumble-server.ini /data/mumble-server.ini
VOLUME ["/data"]

ENTRYPOINT [ "/usr/bin/mumble-server" ]
CMD [ "-fg", "-v", "-ini", "/data/mumble-server.ini" ]