# ---- Build stage ----
FROM node:20-alpine AS build

WORKDIR /usr/src/app

COPY package.json package-lock.json ./
RUN npm ci

COPY tsconfig.json tsconfig.build.json nest-cli.json ./
COPY src ./src
COPY API ./API

RUN NODE_OPTIONS="--max-old-space-size=4096" npm run build || (echo "Build failed" && exit 1)

# Verify build output
RUN ls -la dist/ && echo "Build completed successfully"

# ---- Production stage ----
FROM node:20-alpine AS production

RUN apk add --no-cache dumb-init

ENV NODE_ENV=production
WORKDIR /usr/src/app

COPY package.json package-lock.json ./
RUN npm ci --omit=dev && npm cache clean --force

COPY --from=build /usr/src/app/dist ./dist
COPY --from=build /usr/src/app/API ./API
COPY --from=build /usr/src/app/src/softvoyage/data ./src/softvoyage/data

# Verify dist was copied
RUN ls -la dist/ && echo "Dist folder contents verified"

RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

EXPOSE 3000

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD wget -qO- http://localhost:3000/health || exit 1

ENTRYPOINT ["dumb-init", "--"]
CMD ["node", "dist/main.js"]
