# ==============================
# 琉璃镜 · 魂镜前端镜像（Frontend / Next.js）：Node 22 + pnpm
# 多阶段构建：deps -> builder -> prod-deps -> runner
# 启动入口：pnpm start（即 next start，默认端口 3000）
# 依赖 BuildKit 的 cache mount，Docker 23+ 默认开启；旧版本需设置 DOCKER_BUILDKIT=1。
# ==============================

# ---------- 基础镜像 ----------
FROM node:22-alpine AS base
ENV PNPM_HOME="/pnpm" \
    PATH="$PNPM_HOME:$PATH" \
    NEXT_TELEMETRY_DISABLED=1
RUN corepack enable

# ---------- 全量依赖（用于构建） ----------
FROM base AS deps
WORKDIR /app/frontend
COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
    pnpm install --frozen-lockfile

# ---------- 构建 ----------
FROM base AS builder
WORKDIR /app/frontend
COPY --from=deps /app/frontend/node_modules ./node_modules
COPY frontend/ ./
# 当前无 public 目录；mkdir 保证 runner 阶段 COPY 不会失败
RUN mkdir -p public \
    && pnpm build

# ---------- 仅生产依赖（缩小运行时镜像） ----------
FROM base AS prod-deps
WORKDIR /app/frontend
COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
    pnpm install --frozen-lockfile --prod

# ---------- 运行时 ----------
FROM base AS runner
WORKDIR /app/frontend
ENV NODE_ENV=production

COPY --from=prod-deps /app/frontend/node_modules ./node_modules
COPY --from=builder /app/frontend/.next ./.next
COPY --from=builder /app/frontend/public ./public
COPY frontend/package.json frontend/next.config.ts ./

EXPOSE 3000

CMD ["pnpm", "start"]
