# Stage 1: Build
FROM node:20-alpine AS builder

WORKDIR /app

# Copy shared package first
COPY ../shared /shared
WORKDIR /shared
RUN npm install && npm run build 2>/dev/null || true

WORKDIR /app

# Copy package files
COPY package.json package-lock.json* ./

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

# Copy prisma schema
COPY ../prisma ./prisma
RUN npx prisma generate

# Copy source
COPY . .

# Build
RUN npm run build

# Stage 2: Production
FROM node:20-alpine AS runner

WORKDIR /app

# Install production deps only
COPY package.json package-lock.json* ./
RUN npm ci --legacy-peer-deps --production && npm cache clean --force

# Copy built output
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/prisma ./prisma

# Create non-root user
RUN addgroup --system --gid 1001 nodejs && \
    adduser --system --uid 1001 nestjs
USER nestjs

EXPOSE 3001

ENV NODE_ENV=production
ENV PORT=3001

CMD ["node", "dist/main.js"]