# syntax=docker/dockerfile:1.6
# ============================================================================
#  Nibiru docs site — multi-stage build
#
#  Default backend: your Ollama at https://api.neuronetz.ai (no API keys).
#  See docker-compose.yml + .env.example for overrides.
# ============================================================================

FROM node:22-alpine AS builder
WORKDIR /app
ENV NODE_ENV=production
ENV NPM_CONFIG_PRODUCTION=false

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

COPY . .

# Build-time embedding generation. Soft-fails so missing models / network
# don't break the build — runtime falls back to chat-only mode.
ARG OLLAMA_BASE_URL=https://api.neuronetz.ai
ARG OLLAMA_EMBED_MODEL=nomic-embed-text
ARG EMBED_PROVIDER=ollama
ARG OPENAI_API_KEY=""
ENV OLLAMA_BASE_URL=$OLLAMA_BASE_URL
ENV OLLAMA_EMBED_MODEL=$OLLAMA_EMBED_MODEL
ENV EMBED_PROVIDER=$EMBED_PROVIDER
ENV OPENAI_API_KEY=$OPENAI_API_KEY
RUN node scripts/build-oracle-index.mjs || true

# Build the static site + SSR entry.
RUN npm run build:site

# Build the LoRA training corpus as a side artifact (deterministic, no API).
RUN node scripts/build-corpus.mjs || true

RUN npm prune --omit=dev

# ----------- Stage 2: runtime -----------------------------------------------
FROM node:22-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=4321

COPY --from=builder /app/dist          ./dist
COPY --from=builder /app/public        ./public
COPY --from=builder /app/scripts       ./scripts
COPY --from=builder /app/node_modules  ./node_modules
COPY --from=builder /app/package.json  ./package.json

EXPOSE 4321
USER node
CMD ["node", "./dist/server/entry.mjs"]
