# ============================================================
# Stage 1: 依赖安装 + 构建
# ============================================================
FROM node:20-alpine AS builder

RUN corepack enable && corepack prepare pnpm@9.15.4 --activate

WORKDIR /monorepo

# 先复制 workspace 配置文件（利用 Docker 层缓存）
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY turbo.json* ./

# 复制所有 package.json（供 pnpm 解析 workspace 依赖）
COPY packages/components/package.json packages/components/
COPY packages/data/package.json        packages/data/
COPY packages/graphql/package.json     packages/graphql/
COPY packages/i18n/package.json        packages/i18n/
COPY packages/lib/package.json         packages/lib/
COPY packages/store/package.json       packages/store/
COPY packages/styles/package.json      packages/styles/
COPY packages/types/package.json       packages/types/
COPY apps/shopify-europe/package.json apps/shopify-europe/

# 安装全部依赖（BuildKit 缓存加速 + secret 注入 .npmrc，token 不写入镜像层）
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \
    --mount=type=secret,id=npmrc,target=/root/.npmrc \
    pnpm install --frozen-lockfile

# 复制源代码
COPY packages/ packages/
COPY apps/shopify-europe/ apps/shopify-europe/

# 构建阶段设置生产模式，React Router 会跳过 dev 分支做优化
ENV NODE_ENV=production

# 1. 构建所有 @repo/* 共享包
RUN pnpm --filter '@repo/*' build

# 2. 构建 React Router 应用（client + server bundle）
RUN NODE_OPTIONS="--max-old-space-size=8192" \
    pnpm --filter shopify-europe exec react-router build

# 3. 使用 pnpm deploy 创建自包含的生产部署目录（解析 workspace 依赖）
RUN pnpm deploy --filter=shopify-europe --prod /deploy

# ============================================================
# Stage 2: 生产镜像（最小化）
# ============================================================
FROM node:20-alpine AS runner

WORKDIR /app

ENV NODE_ENV=production

# 非 root 用户（在 COPY 之前创建，利用层缓存）
RUN addgroup --system --gid 1001 nodejs && \
    adduser  --system --uid 1001 hydrogen

# 直接在 COPY 时设置归属，避免额外的 chown 层
COPY --from=builder --chown=hydrogen:nodejs /deploy .
COPY --from=builder --chown=hydrogen:nodejs /monorepo/apps/shopify-europe/build ./build
COPY --from=builder --chown=hydrogen:nodejs /monorepo/apps/shopify-europe/server.js ./server.js

USER hydrogen

EXPOSE 3005

# HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
#   CMD wget -qO- http://localhost:3005/ | head -c 1 || exit 1

CMD ["node", "server.js"]