# ── Stage 1: Build ──────────────────────────────────────────────
FROM node:22-alpine AS builder

WORKDIR /app

# Install build dependencies for better-sqlite3 (native addon)
RUN apk add --no-cache python3 make g++

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

COPY . .
RUN npm run build

# ── Stage 2: Runtime ────────────────────────────────────────────
FROM node:22-slim

WORKDIR /app

# better-sqlite3 needs shared libs available in slim
RUN apt-get update && apt-get install -y --no-install-recommends \
    tini \
    && rm -rf /var/lib/apt/lists/*

# Copy built output and production node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./

# Create directories for persistent data
RUN mkdir -p /data /uploads && chown -R node:node /data /uploads /app

USER node

ENV HOST=0.0.0.0
ENV PORT=4321
ENV DATABASE_PATH=/data/emdash.db
ENV UPLOAD_DIR=/uploads

EXPOSE 4321

VOLUME ["/data", "/uploads"]

ENTRYPOINT ["tini", "--"]
CMD ["node", "./dist/server/entry.mjs"]
