FROM node:22.23.1-bookworm-slim

ARG MAIN_URL
ARG FRONTEND_URL
ARG NEXT_PUBLIC_BACKEND_URL
ARG NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY
ARG NEXT_PUBLIC_SOURCE_CODE_URL

ENV NODE_ENV=production \
    MAIN_URL=${MAIN_URL} \
    FRONTEND_URL=${FRONTEND_URL} \
    NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL} \
    NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=${NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY} \
    NEXT_PUBLIC_SOURCE_CODE_URL=${NEXT_PUBLIC_SOURCE_CODE_URL}

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

RUN npm --no-update-notifier --no-fund install --global pnpm@10.6.1 pm2

WORKDIR /app
COPY . .

RUN pnpm install --frozen-lockfile \
 && node node_modules/prisma/build/index.js generate \
      --schema ./libraries/nestjs-libraries/src/database/prisma/schema.prisma \
 && NODE_OPTIONS="--max-old-space-size=4096" pnpm run build \
 && mkdir -p /uploads

COPY var/docker/nginx.conf /etc/nginx/nginx.conf
RUN chmod +x /app/deploy/start-production.sh

EXPOSE 5000
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=5 \
  CMD curl --fail http://localhost:5000/api/ || exit 1

CMD ["/app/deploy/start-production.sh"]
