FROM node:20-alpine AS builder
WORKDIR /app

# Node Memory Limit für 2-GB-Server (Webpack würde sonst OOM werfen)
ENV NODE_OPTIONS="--max-old-space-size=1536"
ENV GENERATE_SOURCEMAP=false
ENV CI=false

ARG SHIFTDECK_VERSION=latest

# ─── Layer 1: package.json cachen ─────────────────────────────────────
# Dieser Layer bleibt gleich solange package.json/lock unverändert sind
# → npm install (2-3 Min) wird gecacht
COPY package.json package-lock.json ./
RUN npm ci --legacy-peer-deps --prefer-offline --no-audit --no-fund || \
    npm install --legacy-peer-deps --prefer-offline --no-audit --no-fund

# ─── Layer 2: Source-Code (ändert sich bei jedem Update) ──────────────
# Nur dieser Layer wird neu gebaut bei Code-Änderungen
COPY . .

# Build mit Memory-Limit und ohne Source-Maps (spart RAM + Zeit)
RUN echo "Building SHIFTDECK v${SHIFTDECK_VERSION}" && \
    npm run build

# ─── Production-Image: nur Nginx + Build-Output ───────────────────────
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY nginx-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
EXPOSE 80
ENTRYPOINT ["/docker-entrypoint.sh"]
