# The base arrives pinned from module.json's build.on (python 3.12.13 on alpine 3.24); the mesh
# builds this image from this repository and a commit (novox/hq ADR 0069). The build context is
# the repository root, so every COPY names its path from there.
ARG PYTHON_BASE
FROM ${PYTHON_BASE}

WORKDIR /app

# Runtime deps:
#   - cairo provides libcairo so cairosvg can rasterise SVG → PNG.
#   - ttf-liberation gives Liberation Sans Bold at
#     /usr/share/fonts/liberation/LiberationSans-Bold.ttf — exactly where Arch
#     installs it, so dev (shanks) and prod (this container) render with the
#     same font and the posters come out identical.
RUN apk add --no-cache \
        cairo \
        ttf-liberation

# All pip deps ship musllinux wheels — no build-deps needed.
# numpy is pulled in by models/geo_json/geometry.py for vector ops at import time.
# The versions are the ones the running deployment had (service/requirements.txt).
COPY service/requirements.txt ./requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

COPY cdn-api.py circuits_service.py ergast_service.py posters_service.py ./
COPY models/ ./models/
COPY circuits/ ./circuits/

EXPOSE 8000

CMD ["uvicorn", "cdn-api:app", "--host", "0.0.0.0", "--port", "8000"]
