# syntax=docker/dockerfile:1.7

# --- builder: compile server + web ---
FROM node:20-alpine AS builder
RUN apk add --no-cache python3 make g++
WORKDIR /build

COPY package*.json ./
COPY server/package*.json ./server/
COPY web/package*.json ./web/
RUN npm ci && \
    npm --prefix server ci && \
    npm --prefix web ci

COPY server ./server
COPY web ./web
RUN npm --prefix server run build && \
    npm --prefix web run build

# --- prod deps: production-only node_modules with native bindings rebuilt ---
FROM node:20-alpine AS prod-deps
RUN apk add --no-cache python3 make g++
WORKDIR /deps
COPY server/package*.json ./
RUN npm ci --omit=dev

# --- runtime ---
FROM node:20-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production \
    PORT=4000 \
    APOTHECARY_DB=/data/apothecary.db

COPY --from=prod-deps /deps/node_modules ./node_modules
COPY --from=builder /build/server/dist ./dist
COPY --from=builder /build/server/package.json ./package.json
COPY --from=builder /build/web/dist ./public

RUN mkdir -p /data
VOLUME ["/data"]
EXPOSE 4000

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