# syntax=docker/dockerfile:1.6

FROM node:20-bookworm-slim AS base
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 make g++ ca-certificates curl sqlite3 \
  && rm -rf /var/lib/apt/lists/*

FROM base AS deps
COPY package.json package-lock.json ./
RUN npm ci

FROM base AS builder
ARG MAILFORGE_EMBEDDED=0
ENV MAILFORGE_EMBEDDED=$MAILFORGE_EMBEDDED
ARG MAILFORGE_STANDALONE=0
ARG NEXT_PUBLIC_MAILFORGE_STANDALONE=0
ARG MAILFORGE_NATIVE_AUTH=0
ARG NEXT_PUBLIC_MAILFORGE_NATIVE_AUTH=0
ENV MAILFORGE_STANDALONE=$MAILFORGE_STANDALONE
ENV NEXT_PUBLIC_MAILFORGE_STANDALONE=$NEXT_PUBLIC_MAILFORGE_STANDALONE
ENV MAILFORGE_NATIVE_AUTH=$MAILFORGE_NATIVE_AUTH
ENV NEXT_PUBLIC_MAILFORGE_NATIVE_AUTH=$NEXT_PUBLIC_MAILFORGE_NATIVE_AUTH
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM base AS runner
ENV NODE_ENV=production
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/drizzle ./drizzle
COPY --from=builder /app/src ./src
COPY --from=builder /app/scripts ./scripts
COPY --from=builder /app/tsconfig.json ./tsconfig.json
COPY --from=builder /app/next.config.ts ./next.config.ts
COPY --from=builder /app/package.json ./package.json
COPY docker/entrypoint.sh ./docker/entrypoint.sh
RUN chmod +x ./docker/entrypoint.sh \
  && mkdir -p /app/data /app/public/assets/upload

HEALTHCHECK --interval=15s --timeout=5s --start-period=45s --retries=4 \
  CMD curl -fsS http://localhost:3000/ >/dev/null || exit 1

EXPOSE 3000
ENTRYPOINT ["./docker/entrypoint.sh"]
CMD ["app"]
