FROM node:20-alpine AS build

WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install

COPY . .

# NEXT_PUBLIC_* переменные встраиваются в клиентский бандл на этапе сборки.
ARG NEXT_PUBLIC_SITE_URL=https://top-sysops.ru
ARG NEXT_PUBLIC_CHAT_PROVIDER=none
ARG NEXT_PUBLIC_TOPTICKET_WIDGET_URL=
ARG NEXT_PUBLIC_TOPTICKET_WIDGET_KEY=
ARG NEXT_PUBLIC_CHATWOOT_BASE_URL=
ARG NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN=
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL \
    NEXT_PUBLIC_CHAT_PROVIDER=$NEXT_PUBLIC_CHAT_PROVIDER \
    NEXT_PUBLIC_TOPTICKET_WIDGET_URL=$NEXT_PUBLIC_TOPTICKET_WIDGET_URL \
    NEXT_PUBLIC_TOPTICKET_WIDGET_KEY=$NEXT_PUBLIC_TOPTICKET_WIDGET_KEY \
    NEXT_PUBLIC_CHATWOOT_BASE_URL=$NEXT_PUBLIC_CHATWOOT_BASE_URL \
    NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN=$NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN

# BACKEND_INTERNAL_URL нужен и на этапе сборки (генерация sitemap исполняется
# как серверный код) - но реальные данные для sitemap читаются уже в рантайме,
# на сборку это не влияет, если бэкенд на этот момент недоступен.
ENV NEXT_TELEMETRY_DISABLED=1

RUN npm run build

FROM node:20-alpine AS run

WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1

COPY --from=build /app/public ./public
COPY --from=build /app/.next/standalone ./
COPY --from=build /app/.next/static ./.next/static

EXPOSE 3000
CMD ["node", "server.js"]
