# Build stage
FROM node:20-alpine AS build

WORKDIR /app

# Copy package files
COPY package*.json ./

# Install all dependencies (including dev dependencies for build)
RUN npm ci

# Copy source code
COPY . .

# Create a dummy .env file for build
RUN echo 'DATABASE_URL="postgresql://dummy:dummy@localhost:5432/dummy"' > .env && \
    echo 'JWT_PRIVATE_KEY_PATH=./data/jwt_private.pem' >> .env && \
    echo 'JWT_PUBLIC_KEY_PATH=./data/jwt_public.pem' >> .env && \
    echo 'APP_CONFIG_PATH=./data/app.json' >> .env

# Build the application
RUN npm run build
#RUN npx drizzle-kit generate

# Runtime stage
FROM node:20-alpine AS runtime

WORKDIR /app

# Copy package files
COPY --from=build /app/package*.json ./
COPY --from=build /app/drizzle ./drizzle

# Install only production dependencies
RUN npm ci --only=production

# Copy built application
COPY --from=build /app/build ./build

# Expose the port the app runs on
EXPOSE 3000

# Start the application
CMD ["node", "build/index.js"]