##############
# Base image #
##############
ARG PYTHON_VERSION=3.12
ARG UV_INDEX_URL="https://pypi.nic.cz/cznic/test/"

FROM python:${PYTHON_VERSION}-slim AS base

# Disable apt menus
ENV DEBIAN_FRONTEND=noninteractive \
    PATH="/app/venv/bin:${PATH}" \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    # Compile bytecode to start faster
    UV_COMPILE_BYTECODE=1 \
    # Forbid uv to download python
    UV_PYTHON_DOWNLOADS=never \
    # Define venv location
    UV_PROJECT_ENVIRONMENT=/app/venv

RUN set -eux; \
    adduser --home /app --disabled-password --gecos eppic eppic; \
    chmod go+rx /app; \
    mkdir -p /app/.cache; \
    chmod a+rwx /app/.cache

WORKDIR /app

# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/

USER eppic

############################
# Build Python Application #
############################
FROM base AS build
ARG UV_INDEX_URL

# Create venv
RUN uv venv /app/venv

WORKDIR /app/venv
COPY --chown=eppic:eppic pyproject.toml setup.cfg /app/packages/eppic/

# Compile and install dependencies first to leverage caching on rebuilds
RUN uv pip compile /app/packages/eppic/pyproject.toml --output-file /app/packages/requirements.txt \
    && uv pip install --upgrade --no-cache-dir \
       --requirement /app/packages/requirements.txt \
       psycopg[binary]

COPY --chown=eppic:eppic ./ /app/packages/eppic/
RUN uv pip install --no-cache-dir --no-deps --editable /app/packages/eppic

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

RUN mkdir -p /app/data
COPY --chown=eppic:eppic --from=build /app/venv /app/venv
COPY --chown=eppic:eppic --from=build /app/packages /app/packages

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

CMD ["eppic"]
