##############
# Base image #
##############
FROM debian:12-slim AS base

ENV DEBIAN_FRONTEND=noninteractive
ARG USER=fred

WORKDIR /app

RUN apt-get -y update \
        && apt-get install -y --no-install-recommends \
            gnupg2 \
            ca-certificates \
            wget \
            gettext-base \
        && apt-get -y clean \
        && rm -rf /var/lib/apt/lists/*


RUN set -eux && \
    adduser --home /app --disabled-password --gecos ${USER} ${USER} && \
    chmod go+rwx /app


RUN wget --output-document=/usr/share/keyrings/cznic-archive-keyring.gpg https://archive.nic.cz/dists/cznic-archive-keyring.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/cznic-archive-keyring.gpg] http://archive.nic.cz/scratch bookworm main" > /etc/apt/sources.list.d/fred.list


#####################
# Build Application #
#####################
FROM base AS builder

ARG BUILD_JOBS=1
ENV CMAKE_BUILD_PARALLEL_LEVEL=$BUILD_JOBS

WORKDIR /app

COPY . /app

RUN apt-get -y update                       \
        && apt-get -y install --no-install-recommends \
            cmake                           \
            git                             \
            pkg-config                      \
            build-essential                 \
            libpq-dev                       \
            libmpdec-dev                    \
            libboost-all-dev                \
            libidn11-dev                    \
            libgrpc++-dev                   \
            libprotobuf-dev                 \
            protobuf-compiler               \
            protobuf-compiler-grpc          \
        && apt-get -y clean                 \
        && rm -rf /var/lib/apt/lists/*

RUN echo "Using $CMAKE_BUILD_PARALLEL_LEVEL job(s) for build" && \
    cmake -B build -S . && cmake --build build

###############
# Final image #
###############
FROM base AS final

RUN apt-get -y update                       \
        && apt-get -y install --no-install-recommends \
            libpq5                          \
            libboost-program-options1.74.0  \
            libboost-regex1.74.0            \
            libgrpc++1.51                   \
        && apt-get -y clean                 \
        && rm -rf /var/lib/apt/lists/*

USER ${USER}:${USER}

COPY --from=builder --chown=${USER}:${USER} /app/build/bin/fred-public-request-services /usr/local/bin/fred-public-request-services
COPY --from=config --chown=${USER}:${USER} ./fred-public-request-services.conf.template /etc/fred/fred-public-request-services.conf.template

COPY --from=config --chown=${USER}:${USER} ./docker-entrypoint.sh /

EXPOSE 2246

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["fred-public-request-services", "--config", "/etc/fred/fred-public-request-services.conf"]
