FROM node:20-alpine AS base
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
WORKDIR /app

# ---------------------------------------------------------------------------
# Development (used by docker-compose.yml)
# ---------------------------------------------------------------------------
FROM base AS development
COPY package.json pnpm-workspace.yaml ./
COPY packages/shared/package.json ./packages/shared/
COPY apps/admin/package.json ./apps/admin/
RUN pnpm install --filter @ai-cms/admin... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/admin ./apps/admin
EXPOSE 3001
CMD ["pnpm", "--filter", "@ai-cms/admin", "dev"]

# ---------------------------------------------------------------------------
# Production build (Next.js standalone). Public env vars are baked at build.
# ---------------------------------------------------------------------------
FROM base AS build
ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_BASE_PATH
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_BASE_PATH=$NEXT_PUBLIC_BASE_PATH
ENV NEXT_TELEMETRY_DISABLED=1
COPY package.json pnpm-workspace.yaml ./
COPY packages/shared/package.json ./packages/shared/
COPY apps/admin/package.json ./apps/admin/
RUN pnpm install --filter @ai-cms/admin... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/admin ./apps/admin
RUN pnpm --filter @ai-cms/shared build \
 && pnpm --filter @ai-cms/admin build

# ---------------------------------------------------------------------------
# Production runtime (minimal standalone server)
# ---------------------------------------------------------------------------
FROM base AS production
ENV NODE_ENV=production
ENV PORT=3001
ENV HOSTNAME=0.0.0.0
COPY --from=build /app/apps/admin/.next/standalone ./
COPY --from=build /app/apps/admin/.next/static ./apps/admin/.next/static
COPY --from=build /app/apps/admin/public ./apps/admin/public
EXPOSE 3001
CMD ["node", "apps/admin/server.js"]
