# Build stage
FROM node:22-alpine AS builder

WORKDIR /app

# Install system deps for Prisma
RUN apk add --no-cache libc6-compat openssl

# Copy package manifest first (better layer caching)
COPY nextjs_space/package.json.docker ./package.json

# Reproducible, faster install (omits devDeps in production)
RUN npm ci

# Copy source code
COPY nextjs_space/app ./app
COPY nextjs_space/lib ./lib
COPY nextjs_space/components ./components
COPY nextjs_space/prisma ./prisma
COPY nextjs_space/public ./public
COPY nextjs_space/next.config.js ./
COPY nextjs_space/tailwind.config.ts ./
COPY nextjs_space/tsconfig.json ./
COPY nextjs_space/postcss.config.js ./
COPY nextjs_space/next-env.d.ts ./
COPY nextjs_space/components.json ./

# Generate Prisma client
RUN npx prisma generate

# Build the application
ENV NEXT_TELEMETRY_DISABLED=1
ENV NEXT_OUTPUT_MODE=standalone
RUN npm run build

# ── Production stage ─────────────────────────────────────────────────────────
FROM node:22-alpine AS runner

WORKDIR /app

# Install OpenSSL for Prisma
RUN apk add --no-cache libc6-compat openssl

ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1

# Non-root user for security
RUN addgroup --system --gid 1001 nodejs \
 && adduser  --system --uid 1001 nextjs

# Copy built assets
COPY --from=builder /app/public                   ./public
COPY --from=builder /app/.next/standalone         ./
COPY --from=builder /app/.next/static             ./.next/static
COPY --from=builder /app/prisma                   ./prisma
COPY --from=builder /app/node_modules/.prisma     ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma     ./node_modules/@prisma

# Copy startup script
COPY start.sh ./
RUN chmod +x start.sh

USER nextjs

EXPOSE 3000

ENV PORT=3000
ENV HOSTNAME="0.0.0.0"

CMD ["./start.sh"]
