# EcoBot — Discord-Bot + Webinterface
# Stage 1: React-Frontend bauen
FROM node:22-slim AS frontend
WORKDIR /build
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend ./
RUN npm run build

# Stage 2: Runtime (slim statt alpine: better-sqlite3 liefert glibc-Prebuilds)
FROM node:22-slim

# Fonts für die Willkommens-Karten (sharp/librsvg braucht installierte Schriften),
# git für die Repo-Backups (git clone --mirror + bundle),
# ffmpeg fürs Radio: es holt den MP3-Strom und gibt direkt Ogg/Opus aus — damit
# braucht es keine Opus-Bibliothek in Node, die erst gebaut werden müsste
RUN apt-get update && apt-get install -y --no-install-recommends fonts-dejavu-core git ffmpeg \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Erst nur Manifest kopieren → Docker-Layer-Cache für npm ci
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

COPY src ./src
# Die Prüfwerkzeuge müssen dort laufen, wo der Fehler auftritt — im Container.
# Ohne diese Zeile lief `docker exec … node tools/udp-pruefen.mjs` ins Leere,
# obwohl genau das im Kopf des Skripts steht.
COPY tools ./tools
COPY --from=frontend /build/dist ./frontend/dist

# Laufzeitdaten (SQLite) landen in /app/data → Volume
RUN mkdir -p /app/data

ENV NODE_ENV=production

CMD ["node", "src/index.js"]
