##############
# 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 \
            ssh-client                      \
            cmake                           \
            postgresql-server-dev-all       \
            pkg-config                      \
            build-essential                 \
            bash-completion                 \
            libpq-dev                       \
            libmpdec-dev                    \
            libssl-dev                      \
            nlohmann-json3-dev              \
            libboost-program-options-dev    \
            libboost-thread-dev             \
            libboost-regex-dev              \
            libboost-filesystem-dev         \
            libboost-random-dev             \
            libboost-test-dev               \
            libidn11-dev                    \
            libgrpc++-dev                   \
            libprotobuf-dev                 \
            protobuf-compiler               \
            protobuf-compiler-grpc          \
            python3-grpcio                  \
        && 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                          \
            libmpdec3                       \
            libssl3                         \
            libboost-program-options1.74.0  \
            libboost-thread1.74.0           \
            libboost-regex1.74.0            \
            libboost-filesystem1.74.0       \
            libboost-random1.74.0           \
            libboost-test1.74.0             \
            libidn12                        \
            libgrpc++1.51                   \
            protobuf-compiler               \
        && apt-get -y clean                 \
        && rm -rf /var/lib/apt/lists/*

USER ${USER}:${USER}

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

EXPOSE 2240

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