# Stage 1: Build the application
FROM oven/bun:1.3.8 AS builder
WORKDIR /app

COPY package.json bun.lock ./

RUN bun install

COPY . .

# NEXT_PUBLIC_* подставляются в бандл на сборке, поэтому обязаны быть здесь.
# Это публичные значения — они и так уезжают в браузер. Секреты (JWT_SECRET)
# среди них быть не должны: их место — окружение рантайма.
ARG NEXT_PUBLIC_CLIENT_DOMAIN
ARG NEXT_PUBLIC_CLIENT_URL
ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_SERVER_URL
ARG NEXT_PUBLIC_YANDEX_VERIFICATION_TOKEN

ENV NEXT_PUBLIC_CLIENT_DOMAIN=$NEXT_PUBLIC_CLIENT_DOMAIN \
	NEXT_PUBLIC_CLIENT_URL=$NEXT_PUBLIC_CLIENT_URL \
	NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL \
	NEXT_PUBLIC_SERVER_URL=$NEXT_PUBLIC_SERVER_URL \
	NEXT_PUBLIC_YANDEX_VERIFICATION_TOKEN=$NEXT_PUBLIC_YANDEX_VERIFICATION_TOKEN

RUN bun run build

# Stage 2: Start the application production
FROM oven/bun:1.3.8 AS production

WORKDIR /app

COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
# .env.production намеренно не копируется: JWT_SECRET не должен лежать в слое образа.
# Переменные окружения подаёт оркестратор из своего хранилища секретов.
COPY --from=builder /app/package.json /app/next.config.ts /app/bun.lock /app/tsconfig.json ./

RUN bun install --production
RUN bun add -D typescript
RUN bun add pm2

EXPOSE 3000
CMD ["bun", "run", "start"]
