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/web/package.json ./apps/web/
RUN pnpm install --filter @ai-cms/web... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/web ./apps/web
EXPOSE 3000
CMD ["pnpm", "--filter", "@ai-cms/web", "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_SITE_URL
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
ENV NEXT_TELEMETRY_DISABLED=1
COPY package.json pnpm-workspace.yaml ./
COPY packages/shared/package.json ./packages/shared/
COPY apps/web/package.json ./apps/web/
RUN pnpm install --filter @ai-cms/web... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/web ./apps/web
RUN mkdir -p apps/web/public \
 && pnpm --filter @ai-cms/shared build \
 && pnpm --filter @ai-cms/web build

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