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/api/package.json ./apps/api/
RUN pnpm install --filter @ai-cms/api... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/api ./apps/api
EXPOSE 3002
CMD ["pnpm", "--filter", "@ai-cms/api", "dev"]

# ---------------------------------------------------------------------------
# Production build (compiles Nest + shared, generates Prisma client)
# ---------------------------------------------------------------------------
FROM base AS build
RUN apk add --no-cache python3 make g++
COPY package.json pnpm-workspace.yaml ./
COPY packages/shared/package.json ./packages/shared/
COPY apps/api/package.json ./apps/api/
RUN pnpm install --filter @ai-cms/api... --frozen-lockfile=false
COPY packages/shared ./packages/shared
COPY apps/api ./apps/api
RUN pnpm --filter @ai-cms/shared build \
 && pnpm --filter @ai-cms/api prisma:generate \
 && pnpm --filter @ai-cms/api build

# ---------------------------------------------------------------------------
# Production runtime. Keeps prisma CLI + tsx so migrations / seed / import
# can be run inside the container via the deploy script.
# ---------------------------------------------------------------------------
FROM base AS production
ENV NODE_ENV=production
ENV PORT=3002
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY --from=build /app/packages/shared ./packages/shared
# Whole app (dist + src + prisma + node_modules) so tsx-based scripts
# (seed, import-knut, migrate-media-to-s3) and prisma CLI work in-container.
COPY --from=build /app/apps/api ./apps/api
COPY VERSION /app/VERSION
WORKDIR /app/apps/api
EXPOSE 3002
CMD ["node", "dist/main.js"]
