# Barev Club — образы для продакшена.
#   app  — Node: API + воркер + боты (один процесс) и лендинг Next.js (тот же образ)
#   web  — nginx: статика Mini App и админки + прокси /trpc и /files на API
FROM node:22-alpine AS deps
RUN corepack enable
WORKDIR /repo
COPY . .
RUN pnpm install --frozen-lockfile

FROM deps AS build
# адреса, которые зашиваются в клиентский код при сборке
ARG LANDING_URL
ARG API_PUBLIC_URL
ARG CLIENT_BOT_USERNAME=barevclub_bot
ENV VITE_LANDING_URL=$LANDING_URL NEXT_PUBLIC_API_URL=$API_PUBLIC_URL CLIENT_BOT_USERNAME=$CLIENT_BOT_USERNAME NEXT_TELEMETRY_DISABLED=1
RUN pnpm --filter @barev/miniapp-client build \
 && pnpm --filter @barev/miniapp-pro build \
 && pnpm --filter @barev/admin build \
 && pnpm --filter @barev/landing build

FROM nginx:alpine AS web
COPY --from=build /repo/apps/miniapp-client/dist /srv/client
COPY --from=build /repo/apps/miniapp-pro/dist /srv/pro
COPY --from=build /repo/apps/admin/dist /srv/admin
COPY infra/prod/nginx.conf /etc/nginx/conf.d/default.conf

FROM node:22-alpine AS app
RUN corepack enable
WORKDIR /repo
ENV NODE_ENV=production TZ=Asia/Yerevan
COPY --from=deps /repo /repo
# лендинг: standalone-сборка со своими node_modules
COPY --from=build /repo/apps/landing/.next/standalone /landing
COPY --from=build /repo/apps/landing/.next/static /landing/apps/landing/.next/static
EXPOSE 4000 3000
# при старте: миграции и синхронизация каталога, затем API + воркер + боты
CMD ["sh", "-c", "cd packages/db && ./node_modules/.bin/prisma migrate deploy && ./node_modules/.bin/tsx src/scripts/sync-catalog.ts && cd /repo && exec apps/runtime/node_modules/.bin/tsx apps/runtime/index.ts"]
