# =============================================================================
# ChatApp Workers - Multi-stage Dockerfile
# Service: Background Workers (BullMQ) - No exposed port
# Security: non-root user, pinned base, minimal runtime
# ==============================================================================

# ---- Stage 1: Builder ----
FROM node:20-slim@sha256:0a6e0c3e5e9e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e AS builder

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 make g++ openssl \
    && rm -rf /var/lib/apt/lists/*

# Copy workspace root files
COPY package.json package-lock.json turbo.json tsconfig.json ./

# Copy all package.json files
COPY backend/apps/api/package.json ./backend/apps/api/
COPY backend/apps/realtime/package.json ./backend/apps/realtime/
COPY backend/apps/workers/package.json ./backend/apps/workers/
COPY backend/libs/database/package.json ./backend/libs/database/
COPY backend/libs/redis/package.json ./backend/libs/redis/
COPY backend/libs/types/package.json ./backend/libs/types/
COPY backend/libs/constants/package.json ./backend/libs/constants/
COPY backend/libs/dtos/package.json ./backend/libs/dtos/
COPY backend/libs/utils/package.json ./backend/libs/utils/

# Install all dependencies
RUN npm ci --legacy-peer-deps

# Copy full source code
COPY backend/ ./backend/

# Generate Prisma client
RUN npx prisma generate --schema=backend/libs/database/prisma/schema.prisma

# Compile Workers TypeScript
RUN npx tsc --project backend/apps/workers/tsconfig.json

# ---- Stage 2: Runtime ----
FROM node:20-slim@sha256:0a6e0c3e5e9e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e AS runtime

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
    openssl curl dumb-init \
    && rm -rf /var/lib/apt/lists/*

# Create non-root user
RUN groupadd -r nodeapp && useradd -r -g nodeapp -d /app -s /bin/bash nodeapp

# No port exposed - background process
COPY --from=builder --chown=nodeapp:nodeapp /app/node_modules ./node_modules
COPY --from=builder --chown=nodeapp:nodeapp /app/backend/apps/workers/dist ./dist
COPY --from=builder --chown=nodeapp:nodeapp /app/backend/libs/database/prisma ./prisma
COPY --chown=nodeapp:nodeapp package.json ./

ENV NODE_ENV=production

USER nodeapp

# Health check via process liveness — workers don't expose HTTP endpoints.
# Monitor via Docker restart policy and BullMQ queue metrics.
# If a lightweight HTTP health endpoint is added, enable:
# HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
#   CMD curl -f http://localhost:3100/health || exit 1

ENTRYPOINT ["dumb-init", "--"]
CMD ["node", "dist/apps/workers/src/main.js"]