# =============================================================================
# ChatApp Realtime - Multi-stage Dockerfile
# Service: WebSocket Gateway (Socket.io) - Port 3002
# 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 Realtime TypeScript
RUN npx tsc --project backend/apps/realtime/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

COPY --from=builder --chown=nodeapp:nodeapp /app/node_modules ./node_modules
COPY --from=builder --chown=nodeapp:nodeapp /app/backend/apps/realtime/dist ./dist
COPY --from=builder --chown=nodeapp:nodeapp /app/backend/libs/database/prisma ./prisma
COPY --chown=nodeapp:nodeapp package.json ./

ENV NODE_ENV=production
ENV WS_PORT=3002

EXPOSE 3002

USER nodeapp

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD curl -f http://localhost:3002/health || exit 1

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