FROM python:3.12-slim

WORKDIR /app

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

# Install dependencies first (cached layer — only invalidates when pyproject.toml changes)
COPY pyproject.toml .
RUN uv pip install --system --no-cache fastapi uvicorn[standard] sqlmodel apscheduler \
    cryptography httpx jinja2 python-multipart prometheus-client aiofiles

# Copy application code
COPY app/ ./app/

# Install the package itself (editable-free, no pip install of the whole project)
RUN uv pip install --system --no-cache --no-deps .

ARG APP_VERSION=dev
LABEL org.opencontainers.image.version="${APP_VERSION}"

VOLUME ["/data"]
EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
  CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')" || exit 1

CMD ["python", "-m", "app.main"]
