# syntax=docker/dockerfile:1

FROM node:22-alpine AS deps
WORKDIR /app

RUN apk add --no-cache libc6-compat openssl

COPY package.json package-lock.json ./
COPY apps/web/package.json apps/web/package.json
COPY apps/admin/package.json apps/admin/package.json
COPY apps/api/package.json apps/api/package.json
COPY apps/worker/package.json apps/worker/package.json
COPY packages/db/package.json packages/db/package.json
COPY packages/shared/package.json packages/shared/package.json
COPY packages/suppliers/package.json packages/suppliers/package.json
COPY packages/i18n/package.json packages/i18n/package.json
COPY packages/ui/package.json packages/ui/package.json

RUN npm ci

FROM deps AS builder
WORKDIR /app
ARG NEXT_PUBLIC_API_BASE_URL
ARG NEXT_PUBLIC_SITE_URL
ARG SITE_URL
ENV NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL}
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
ENV SITE_URL=${SITE_URL}
COPY . .
RUN npm run db:generate
RUN npm run build

FROM node:22-alpine AS runtime
WORKDIR /app

ENV NODE_ENV=production

RUN apk add --no-cache openssl

COPY --from=builder /app /app

FROM runtime AS web
ENV WEB_PORT=3000
EXPOSE 3000
CMD ["npm", "run", "start", "--workspace", "@flygb/web"]

FROM runtime AS admin
ENV ADMIN_PORT=3001
EXPOSE 3001
CMD ["npm", "run", "start", "--workspace", "@flygb/admin"]

FROM runtime AS api
ENV API_PORT=4000
EXPOSE 4000
CMD ["npm", "run", "start", "--workspace", "@flygb/api"]

FROM runtime AS worker
CMD ["npm", "run", "start", "--workspace", "@flygb/worker"]
