##########################################################################
#
#   Data Transport Network Application Container 
#
#   This image runs a data transport application. It uses an external 
#   container for the message store (usenet or sql).
#
#   2025-06-27  Todd Valentic
#               Initial implementation
#
##########################################################################

FROM almalinux/9-init 

LABEL   name="datatransport-transport" \
        vendor="Todd Valentic" \
        release="2025-06" \
        summary="Data transport application" \
        maintainer="Todd Valentic <todd.valentic@gmail.com>" \
        description="Complete data transport system image"

ARG BUILD_GROUPS="" \
    USER_NAME=transport \
    USER_UID=1000 \
    USER_GID=1000

ENV DATA_TRANSPORT_PATH=/opt/transport \
    PATH="/venv/bin:$PATH" \
    PGHOST=localhost \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_FROZEN=1 \
    UV_LINK_MODE=copy \
    UV_NO_MANAGED_PYTHON=1 \
    UV_PROJECT_ENVIRONMENT=/venv \
    UV_PYTHON=3.12 \
    UV_REQUIRE_HASHES=1 \
    UV_VERIFY_HASHES=1 \
    VIRTUAL_ENV=/venv

# Install OS packages ----------------------------------------------------

RUN dnf install -y --nodocs epel-release && \
    crb enable && \
    dnf -y module enable postgresql:16 && \
    dnf install -y --nodocs \
        hostname \
        python3.12 \
        telnet \
        vim-enhanced \
        tmux \
        postgresql \
        && \
    dnf clean all && \
    rm -rf /var/cache/dnf /var/cache/microdnf

COPY --from=ghcr.io/astral-sh/uv:0.8.2 /uv /uvx /usr/local/bin/

# Copy config and application files ---------------------------------------

COPY config/ /
COPY --chown=$USER_UID:$USER_GID transport/ $DATA_TRANSPORT_PATH

# Install Python packages for data transport application ------------------

RUN groupadd --gid $USER_GID $USER_NAME \
&&  useradd --uid $USER_UID --gid $USER_GID --create-home --shell /bin/bash $USER_NAME \
&&  mkdir $VIRTUAL_ENV \
&&  chown $USER_UID:$USER_GID $VIRTUAL_ENV \
&&  systemctl enable datatransport.service

# Switching here to USER $USER_NAME seems to break in MacOS builds (dns failure)
# so install as root, chown to $USER_NAME instead
# USER $USER_NAME

WORKDIR $DATA_TRANSPORT_PATH

RUN uv venv $VIRTUAL_ENV \
&&  uv sync --no-install-project --no-editable $BUILD_GROUPS \\
&&  chown -R $USER_NAME: $VIRTUAL_ENV
