# Stage 1: Build and install dependencies
FROM node:22-alpine AS builder

WORKDIR /app

# Install necessary dependencies, including pnpm
RUN set -eux \
    && apk add --no-cache nodejs curl \
    && npm install -g pnpm

# Copy package files
COPY package.json pnpm-lock.yaml ./

# Set build arguments
ARG CONTAINER_WEB_VERSION
ARG ENVIRONMENT
ARG BUILD_DATE
ARG GIT_COMMIT

# Create .env file with build-time environment variables
RUN echo "PUBLIC_VERSION=${CONTAINER_WEB_VERSION}" > /app/.env && \
    echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \
    echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \
    echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env

# Install dependencies (including development dependencies) and build the project
RUN pnpm install --frozen-lockfile && pnpm run build

# Stage 2: Set up the production environment
FROM node:22-alpine

WORKDIR /app

# Expose the port for the application
EXPOSE 3000

# Copy the build artifacts from the builder stage
COPY --from=builder /app/dist ./dist

# Set the command to run the application
CMD ["node", "./dist/server/entry.mjs"]
