# =============================================================================
# Stage 1: Collect peerDependencies tarballs using cdn-helper
# =============================================================================
FROM ghcr.io/industream/cdn-helper:1.0.9 AS cdn-helper

COPY frontend/package.json /tmp/package.json
RUN /cdn/collect-deps.sh /tmp/package.json

# =============================================================================
# Stage 2: Build backend
# =============================================================================
FROM node:22-alpine AS flowmaker-flowbox-builder

RUN apk update && apk add build-base python3 cmake curl

RUN mkdir -p /tmp/build
WORKDIR /tmp/build

RUN npm install -g pnpm

COPY package.json /tmp/build
RUN pnpm install

COPY tsconfig.json /tmp/build
COPY src  /tmp/build/src
RUN pnpm run build

RUN pnpm prune --production

# =============================================================================
# Stage 3: Build frontend
# =============================================================================
FROM node:22-alpine AS flowmaker-frontend-builder

RUN mkdir -p /tmp/frontend
WORKDIR /tmp/frontend

RUN npm install -g pnpm

COPY frontend/package.json /tmp/frontend
RUN pnpm install

COPY frontend/src /tmp/frontend/src
COPY frontend/vite.config.js /tmp/frontend
RUN pnpm run build

# =============================================================================
# Stage 4: Final image
# =============================================================================
FROM node:22-bookworm-slim AS flowmaker-flowbox-target

RUN apt-get update && apt-get install -y --no-install-recommends curl jq && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/app/backend

WORKDIR /usr/app

# Copy backend
COPY --from=flowmaker-flowbox-builder /tmp/build/node_modules /usr/app/backend/node_modules
COPY --from=flowmaker-flowbox-builder /tmp/build/dist  /usr/app/backend
COPY ./package.json         /usr/app/backend
COPY ./tsconfig.json        /usr/app/backend
COPY ./src/version.js       /usr/app/backend/
# Symlink for version.js which imports ../package.json from dist/
RUN ln -s /usr/app/backend/package.json /usr/app/package.json

# Copy frontend
COPY --from=flowmaker-frontend-builder /tmp/frontend/dist/ /usr/app/config/

# CDN INTEGRATION
COPY --from=cdn-helper /cdn-runtime /cdn-runtime

WORKDIR /usr/app/backend

ENTRYPOINT ["/cdn-runtime/docker-entrypoint.sh"]
CMD ["node", "/usr/app/backend/index.js"]
