# syntax=docker/dockerfile:1

# ---- stage 1: compile the ClojureScript frontend (release build) ----
# Java (for the shadow-cljs compiler) + Node (npm deps / launcher).
FROM clojure:temurin-21-tools-deps AS frontend
WORKDIR /build/tl
RUN apt-get update && apt-get install -y --no-install-recommends nodejs npm \
    && rm -rf /var/lib/apt/lists/*
COPY tl/package.json tl/package-lock.json ./
RUN npm ci
COPY tl/ ./
# api-port is left "" in the release build → the app talks to its own origin.
RUN npx shadow-cljs release app

# ---- stage 2: Python runtime — Django ASGI (daphne) + ffmpeg ----
FROM python:3.12-slim-bookworm AS runtime
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 PIP_NO_CACHE_DIR=1
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY manage.py ./
COPY server/ ./server/
COPY scenes/ ./scenes/
# the built SPA (index.html, css, fonts, icons, js/compiled/app.js) for WhiteNoise
COPY --from=frontend /build/tl/resources/public ./tl/resources/public
RUN python manage.py collectstatic --noinput
EXPOSE 8000
# migrate on boot (idempotent; the volume holds the SQLite db), then serve ASGI.
CMD ["sh", "-c", "python manage.py migrate --noinput && exec daphne -b 0.0.0.0 -p 8000 server.asgi:application"]
