# ---------- 构建阶段 ----------
FROM node:24-alpine AS builder

# pnpm 版本与 package.json 的 packageManager 字段保持一致
RUN npm install -g pnpm@11.21.0

WORKDIR /app

# 构建期关闭遥上报，避免容器构建时产生外部请求
ENV NUXT_TELEMETRY_DISABLED=1

# 先只复制依赖清单，让 pnpm install 这一层可以被缓存复用
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/web/package.json apps/web/package.json
COPY packages/cook/package.json packages/cook/package.json
COPY packages/mcp/package.json packages/mcp/package.json
COPY docs/package.json docs/package.json

RUN pnpm install --frozen-lockfile

# 再复制源码并构建
COPY . .

# 统计配置在构建期编译进静态产物
ARG NUXT_PUBLIC_CLARITY_PROJECT_ID=ks1ebw03i5
ARG NUXT_PUBLIC_CLARITY_DOMAINS=cook.yunyoujun.cn,cook.yunle.fun
ENV NUXT_PUBLIC_CLARITY_PROJECT_ID=${NUXT_PUBLIC_CLARITY_PROJECT_ID}
ENV NUXT_PUBLIC_CLARITY_DOMAINS=${NUXT_PUBLIC_CLARITY_DOMAINS}

# 镜像里没有 .git，版本号组件拿不到 commit；传入该值即可显示版本信息
ARG CF_PAGES_COMMIT_SHA=
ENV CF_PAGES_COMMIT_SHA=${CF_PAGES_COMMIT_SHA}

# 构建产物输出到仓库根目录的 dist/（见 scripts/copy-web-output.ts）
RUN pnpm run build

# MCP Server 依赖 @yunyoujun/cook 的构建产物，根 build 不含它，需单独构建
RUN pnpm -C packages/cook run build \
    && pnpm -C packages/mcp run build

# MCP Server 的生产依赖（含 workspace 包 @yunyoujun/cook 的构建产物）
RUN pnpm --filter @cook/mcp deploy --legacy --prod /app/mcp-deploy

# ---------- 运行阶段 ----------
FROM nginx:stable-alpine

# MCP Server 需要 Node 运行时，与 nginx 共存于同一容器
RUN apk add --no-cache nodejs npm \
    && mkdir -p /data

COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html

COPY --from=builder /app/mcp-deploy /opt/cook-mcp
COPY --from=builder /app/packages/data/recipe.csv /data/recipe.csv
COPY --from=builder /app/packages/data/incompatible-foods.csv /data/incompatible-foods.csv

COPY docker/entrypoint.sh /usr/local/bin/cook-entrypoint
RUN chmod +x /usr/local/bin/cook-entrypoint

ENV COOK_DATA_DIR=/data \
    COOK_MCP_PORT=2230 \
    COOK_MCP_HOST=0.0.0.0 \
    COOK_MCP_PATH=/mcp

EXPOSE 2229 2230

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD wget -qO- http://127.0.0.1:2229/ >/dev/null || exit 1

ENTRYPOINT ["/usr/local/bin/cook-entrypoint"]
