# Scheibe S0 aus docs/07-mvp-plan.md: Toolchain-Image.
#
# Bewusst noch ohne `pnpm install` - es gibt noch keine Abhaengigkeiten und
# keine Lockfile. Der Entrypoint kommt mit reinem Node aus. Sobald in S1
# echter Code dazukommt, wird hier eine deps-Stufe ergaenzt.

# ---------- whisper.cpp bauen ----------
FROM debian:bookworm-slim AS whisper
ARG WHISPER_VERSION=v1.7.4
RUN apt-get update && apt-get install -y --no-install-recommends \
      build-essential cmake git ca-certificates \
    && rm -rf /var/lib/apt/lists/*
RUN git clone --depth 1 --branch ${WHISPER_VERSION} \
      https://github.com/ggerganov/whisper.cpp /src
WORKDIR /src
RUN cmake -B build -DCMAKE_BUILD_TYPE=Release -DWHISPER_BUILD_TESTS=OFF \
      -DWHISPER_BUILD_EXAMPLES=ON \
    && cmake --build build --config Release -j"$(nproc)" \
    && mkdir -p /out \
    && cp build/bin/whisper-cli /out/ \
    && (cp build/src/libwhisper.so* /out/ 2>/dev/null || true) \
    && (cp build/ggml/src/libggml*.so /out/ 2>/dev/null || true)

# ---------- Laufzeit ----------
FROM node:22-bookworm-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
      ffmpeg fonts-dejavu-core ca-certificates curl \
    && rm -rf /var/lib/apt/lists/*

COPY --from=whisper /out/ /usr/local/lib/whisper/
RUN ln -s /usr/local/lib/whisper/whisper-cli /usr/local/bin/whisper-cli \
    && echo /usr/local/lib/whisper > /etc/ld.so.conf.d/whisper.conf \
    && ldconfig

WORKDIR /app
COPY docker/ ./docker/
COPY package.json ./

# Die Datenbank und die Sprachmodelle liegen in benannten Volumes, nicht im
# Bind-Mount - siehe docs/decisions/ADR-0004-docker.md
ENV WHISPER_BIN=/usr/local/bin/whisper-cli \
    MODEL_DIR=/models \
    DB_DIR=/db \
    WORK_DIR=/work \
    CLIPS_DIR=/app/data/clips \
    REPLAY_DIR=/replay \
    CONFIG_DIR=/app/config \
    NODE_ENV=production

EXPOSE 4780 4790 4791 4792

ENTRYPOINT ["node", "/app/docker/entrypoint.js"]
CMD ["help"]
