# Echter Produktions-Build (next build/next start) statt des bisherigen
# next-dev-Servers - Phase 7 aus dem Architekturplan, ausgeloest durch
# iOS-Safari-Nutzerfeedback (der Dev-Server haengt dort teils bei "Laedt...",
# vermutlich durch die HMR-Websocket-Verbindung ueber den Reverse-Proxy).
# Mehrstufig: die erste Stage baut, die zweite enthaelt nur das von
# next.config.ts "output: standalone" erzeugte, minimale Server-Bundle -
# kein voller node_modules-Baum, kein Quellcode im fertigen Image.
FROM node:22-slim AS builder

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . .

# NEXT_PUBLIC_*-Variablen werden von Next.js beim Build in das Client-JS-
# Bundle eingebacken, nicht erst zur Laufzeit gelesen (anders als normale
# Server-seitige Env-Variablen) - muessen deshalb hier als Build-Arg
# hereingereicht werden, ein reines docker-compose "environment:" zur
# Laufzeit haette keine Wirkung mehr auf den bereits gebauten Client-Code.
ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_SITE_URL
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}

RUN npm run build

FROM node:22-slim AS runner

WORKDIR /app
ENV NODE_ENV=production

RUN useradd --create-home appuser
USER appuser

# "standalone"-Output enthaelt server.js + eine getrimmte node_modules-
# Kopie, aber bewusst NICHT public/ und .next/static/ (Next kopiert diese
# beiden Verzeichnisse nicht automatisch mit) - muessen separat kopiert
# werden, sonst fehlen Bilder/CSS/JS-Chunks zur Laufzeit.
COPY --from=builder --chown=appuser:appuser /app/.next/standalone ./
COPY --from=builder --chown=appuser:appuser /app/.next/static ./.next/static
COPY --from=builder --chown=appuser:appuser /app/public ./public

EXPOSE 3000

CMD ["node", "server.js"]
