# syntax=docker/dockerfile:1

FROM python:3.12-slim-bookworm AS builder

ENV UV_LINK_MODE=copy

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

WORKDIR /app

COPY pyproject.toml uv.lock README.md LICENSE NOTICE ./
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --locked --no-dev --no-install-project

COPY src/ src/
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --locked --no-dev --no-editable --compile-bytecode

FROM python:3.12-slim-bookworm

ENV PYTHONUNBUFFERED=1 \
    MPLBACKEND=Agg \
    MPLCONFIGDIR=/var/cache/matrouter/matplotlib \
    MATROUTER_CACHE_DIR=/var/cache/matrouter \
    PATH="/app/.venv/bin:$PATH"

WORKDIR /app

COPY --from=builder /app/.venv /app/.venv

RUN useradd --system --user-group --home-dir /app --no-create-home matrouter \
    && install -d -o matrouter -g matrouter "$MATROUTER_CACHE_DIR" "$MPLCONFIGDIR"

USER matrouter

EXPOSE 8000

HEALTHCHECK --timeout=5s --start-period=120s \
    CMD ["python", "-c", "from urllib.request import urlopen; urlopen('http://127.0.0.1:8000/health', timeout=3).close()"]

CMD ["uvicorn", "matrouter.server:create_http_app", "--factory", "--host", "0.0.0.0", "--port", "8000", "--no-access-log"]
