# Multi-stage: frontend-bygge -> backend-deps -> slim runtime (arm64 på Pi5)
# OBS: trixie (glibc 2.41), inte bookworm — better-sqlite3:s bundlade
# arm64-prebuild kräver GLIBC >= 2.38 och paketet har inget install-script,
# så source-build går inte att tvinga via npm ci.
ARG BUILD_CPUS=2

FROM node:22-trixie-slim AS frontend
WORKDIR /f
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci --no-audit --no-fund
COPY frontend/ ./
RUN npm run build

FROM node:22-trixie-slim AS backend
WORKDIR /app
COPY backend/package.json backend/package-lock.json ./
# --ignore-scripts: better-sqlite3 saknar install-script men har binding.gyp,
# så npm auto-kör node-gyp (kräver python). Onödigt — laddaren föredrar ändå
# den bundlade prebuilden, som funkar på trixie (glibc 2.41 >= 2.38).
RUN npm ci --omit=dev --no-audit --no-fund --ignore-scripts
COPY backend/src ./src

FROM node:22-trixie-slim
ENV NODE_ENV=production
WORKDIR /app
COPY --from=backend /app ./
COPY --from=frontend /f/dist ./public
EXPOSE 3000
USER node
CMD ["node", "src/server.js"]
