# =============================================================================
# ChatApp API - Multi-stage Dockerfile
# Service: API (NestJS) - Port 3010
# Security: non-root user, pinned base, minimal runtime
# ==============================================================================

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

WORKDIR /app

# Install dependencies required for building (python for native modules)
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 for hoisted install
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 API TypeScript
RUN npx tsc --project backend/apps/api/tsconfig.json

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

WORKDIR /app

# Install openssl for Prisma runtime + curl for healthcheck + dumb-init for PID 1
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 for security
RUN groupadd -r nodeapp && useradd -r -g nodeapp -d /app -s /bin/bash nodeapp

# Copy only production node_modules
COPY --from=builder --chown=nodeapp:nodeapp /app/node_modules ./node_modules
COPY --from=builder --chown=nodeapp:nodeapp /app/backend/apps/api/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 API_PORT=3010

EXPOSE 3010

USER nodeapp

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

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