FROM python:3.14-slim AS base

COPY --from=ghcr.io/astral-sh/uv:0.11.26 /uv /uvx /bin/

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    APP_DIR=/home/richie/dotfiles \
    UV_PROJECT_ENVIRONMENT=/opt/venv \
    UV_PYTHON_DOWNLOADS=never \
    UV_NO_CACHE=1

# Separate ENV instruction so ${APP_DIR} and ${PATH} from above resolve.
ENV PYTHONPATH=${APP_DIR} \
    PATH=/opt/venv/bin:${PATH}

WORKDIR ${APP_DIR}

RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential curl \
    && rm -rf /var/lib/apt/lists/*

COPY python/ebook_search/docker/pyproject.toml python/ebook_search/docker/uv.lock ./

RUN uv sync --locked --no-dev


FROM base AS test

RUN uv sync --locked

COPY python ./python
COPY tests/__init__.py ./tests/__init__.py
COPY tests/ebook_search ./tests/ebook_search

CMD ["pytest"]


FROM base AS runtime

ENV EBOOK_SEARCH_HOST=0.0.0.0 \
    EBOOK_SEARCH_PORT=8070 \
    EBOOK_SEARCH_BM25_INDEX_DIR=/data/bm25

COPY python ./python

RUN useradd --create-home --uid 10001 app \
    && mkdir -p /data \
    && chown -R app:app /home/richie /data

USER app

EXPOSE 8070

CMD ["sh", "-c", "exec python -m python.ebook_search.api.main --host \"${EBOOK_SEARCH_HOST}\" --port \"${EBOOK_SEARCH_PORT}\" --log-level \"${EBOOK_SEARCH_LOG_LEVEL:-INFO}\""]
