FROM node:20-alpine AS deps
WORKDIR /app
COPY worker-client/package*.json ./
RUN npm install --omit=dev

FROM node:20-alpine AS builder
WORKDIR /app
COPY worker-client/package*.json worker-client/tsconfig*.json ./worker-client/
RUN cd worker-client && npm install
COPY shared/src ./shared/src
COPY worker-client/src ./worker-client/src

# Compile shared → CJS JS placed at shared/src/messages.js
# (runtime: dist/cjs/**/*.js will require('../../../shared/src/messages') → this file)
RUN /app/worker-client/node_modules/.bin/tsc \
    --noEmit false --target ES2020 --module CommonJS \
    --moduleResolution node --skipLibCheck \
    --outDir /app/shared/src \
    /app/shared/src/messages.ts

# Compile worker-client CJS only (noEmitOnError false for TS6059 cross-package imports)
RUN cd /app/worker-client && \
    node_modules/.bin/tsc -p tsconfig.cjs.json --noEmitOnError false || true && \
    echo '{"type":"commonjs"}' > dist/cjs/package.json && \
    [ -f dist/cjs/cli.js ] || (echo "ERROR: dist/cjs/cli.js not produced" && exit 1)

FROM node:20-alpine AS runner
WORKDIR /app/worker-client
ENV NODE_ENV=production
COPY --from=deps /app/node_modules ./node_modules
COPY worker-client/package*.json ./
COPY --from=builder /app/worker-client/dist ./dist
COPY --from=builder /app/shared/src/messages.js /app/shared/src/messages.js
CMD ["node", "dist/cjs/cli.js"]
