# Build stage: install deps, generate icons, package extension.
FROM node:20-alpine AS build
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install --no-audit --no-fund
COPY . .
RUN node scripts/generate-icons.js && node scripts/build-extension.js

# Runtime stage: only what the server needs.
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production \
    PORT=8950
COPY package.json package-lock.json* ./
RUN npm install --omit=dev --no-audit --no-fund && npm cache clean --force
COPY --from=build /app/server ./server
COPY --from=build /app/web ./web
COPY --from=build /app/extension ./extension
EXPOSE 8950
HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \
  CMD node -e "require('http').get('http://127.0.0.1:8950/api/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"
CMD ["node", "server/server.js"]
