# syntax=docker/dockerfile:1

# -----------------------------
# Stage 1: Install dependencies
# -----------------------------
FROM node:24-alpine AS deps

WORKDIR /app

RUN corepack enable

COPY package.json yarn.lock ./

RUN yarn install --frozen-lockfile


# -----------------------------
# Stage 2: Build the Next.js app
# -----------------------------
FROM node:24-alpine AS builder

WORKDIR /app

RUN corepack enable

COPY --from=deps /app/node_modules ./node_modules
COPY . .

# Public build-time arguments.
# NEXT_PUBLIC_* values are baked into the Next.js client bundle at build time.
ARG NEXT_PUBLIC_DOCS
ARG NEXT_PUBLIC_EXIT_URL
ARG NEXT_PUBLIC_DOUBLE_LOGIN
ARG NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN
ARG NEXT_PUBLIC_OTP
ARG NEXT_PUBLIC_PROGRESS

ENV NEXT_PUBLIC_DOCS=$NEXT_PUBLIC_DOCS
ENV NEXT_PUBLIC_EXIT_URL=$NEXT_PUBLIC_EXIT_URL
ENV NEXT_PUBLIC_DOUBLE_LOGIN=$NEXT_PUBLIC_DOUBLE_LOGIN
ENV NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN=$NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN
ENV NEXT_PUBLIC_OTP=$NEXT_PUBLIC_OTP
ENV NEXT_PUBLIC_PROGRESS=$NEXT_PUBLIC_PROGRESS

RUN yarn build


# -----------------------------
# Stage 3: Production runtime
# -----------------------------
FROM node:24-alpine AS runner

WORKDIR /app

RUN corepack enable

ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME=0.0.0.0

# Re-declare public args for runtime too.
# These are not secrets.
ARG NEXT_PUBLIC_DOCS
ARG NEXT_PUBLIC_EXIT_URL
ARG NEXT_PUBLIC_DOUBLE_LOGIN
ARG NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN
ARG NEXT_PUBLIC_OTP
ARG NEXT_PUBLIC_PROGRESS

ENV NEXT_PUBLIC_DOCS=$NEXT_PUBLIC_DOCS
ENV NEXT_PUBLIC_EXIT_URL=$NEXT_PUBLIC_EXIT_URL
ENV NEXT_PUBLIC_DOUBLE_LOGIN=$NEXT_PUBLIC_DOUBLE_LOGIN
ENV NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN=$NEXT_PUBLIC_DOUBLE_EMAIL_LOGIN
ENV NEXT_PUBLIC_OTP=$NEXT_PUBLIC_OTP
ENV NEXT_PUBLIC_PROGRESS=$NEXT_PUBLIC_PROGRESS

# Server-only secrets must be passed at runtime, not build time:
# - TURNSTILE_SECRET_KEY
# - BOT_TOKEN_SECRET
# - BOT_RATE_LIMIT_URL
# - BOT_RATE_LIMIT_SECRET

COPY --from=builder /app/package.json ./
COPY --from=builder /app/yarn.lock ./
COPY --from=builder /app/next.config.* ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules

USER node

EXPOSE 3000

CMD ["yarn", "start"]