# Node 20, não 18: o `@apollo/gateway` (transitivo do @clubpetrodev/nestjs-mapped-exception)
# puxa make-fetch-happen@15, que exige "^20.17.0 || >=22.9.0". Com engine-strict
# o yarn falha o build no Node 18 — foi o que quebrou a primeira publicação do routines.
FROM node:20-slim as base

ENV NODE_OPTIONS=--max_old_space_size=2048

RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    build-essential \
    && ln -s /usr/bin/python3 /usr/bin/python \
    && rm -rf /var/lib/apt/lists/*

FROM base as builder
WORKDIR /usr/src/app

# O .npmrc NÃO é versionado (as libs @clubpetrodev/* precisam de token privado).
# Ele é gerado a partir do build-arg e removido antes da imagem final.
ARG NPM_TOKEN
COPY package.json yarn.lock tsconfig.json tsconfig.build.json nest-cli.json ./
RUN printf '//registry.npmjs.org/:_authToken=%s\nengine-strict=true\n' "$NPM_TOKEN" > .npmrc
COPY src/ src/

RUN yarn install --immutable
RUN yarn build
RUN rm -f .npmrc


FROM base as runner
ENV NODE_OPTIONS=--max_old_space_size=2048
WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/src/ormconfig.ts ./src/ormconfig.ts
COPY --from=builder /usr/src/app/package.json /usr/src/app/yarn.lock /usr/src/app/tsconfig.json /usr/src/app/tsconfig.build.json /usr/src/app/nest-cli.json ./
COPY --from=builder /usr/src/app/dist ./dist
COPY --from=builder /usr/src/app/node_modules ./node_modules

EXPOSE 3000
CMD [ "yarn", "start:prod" ]
