# 基础镜像走 DaoCloud（避免 docker.1ms.run 等加速站缺 node/nginx manifest）
ARG NODE_IMAGE=docker.m.daocloud.io/library/node:20-alpine
ARG NGINX_IMAGE=docker.m.daocloud.io/library/nginx:1.27-alpine

# ---------- OA H5（mobile-oa-h5 → /oa-h5/）----------
FROM ${NODE_IMAGE} AS oa-h5-builder

ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG NODE_MAX_OLD_SPACE_SIZE=4096
ENV NODE_OPTIONS="--max-old-space-size=${NODE_MAX_OLD_SPACE_SIZE}"
ENV HUSKY=0

RUN npm config set registry "${NPM_REGISTRY}" \
    && npm config set fetch-retries 5 \
    && npm config set fetch-retry-mintimeout 60000 \
    && npm config set fetch-retry-maxtimeout 600000 \
    && npm config set fetch-timeout 600000

WORKDIR /oa-h5

COPY mobile-oa-h5/package.json mobile-oa-h5/package-lock.json ./
RUN --mount=type=cache,id=zkxw-oa-h5-npm,target=/root/.npm \
    npm ci --no-audit --no-fund

COPY mobile-oa-h5/ .
# 同域 /api、/minio/zkxw + 生产服务号 AppID（见 .env.docker）
RUN npm run build -- --mode docker

# ---------- Web Admin ----------
FROM ${NODE_IMAGE} AS builder

ARG NPM_REGISTRY=https://registry.npmmirror.com
ARG PNPM_VERSION=9.15.4
ARG NODE_MAX_OLD_SPACE_SIZE=4096
ENV NODE_OPTIONS="--max-old-space-size=${NODE_MAX_OLD_SPACE_SIZE}"
# 构建阶段须安装 devDependencies（vite 等）；勿设 NODE_ENV=production
ENV HUSKY=0

# 国内机器勿用 registry.npmjs.org；先走镜像元数据，失败再直装 tarball
RUN set -eux; \
    npm config set registry "${NPM_REGISTRY}"; \
    npm config set fetch-retries 5; \
    npm config set fetch-retry-mintimeout 60000; \
    npm config set fetch-retry-maxtimeout 600000; \
    npm config set fetch-timeout 600000; \
    if ! npm install -g "pnpm@${PNPM_VERSION}"; then \
      echo "npm 元数据安装 pnpm 失败，尝试 tarball: ${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
      npm install -g "${NPM_REGISTRY}/pnpm/-/pnpm-${PNPM_VERSION}.tgz"; \
    fi; \
    pnpm --version

WORKDIR /app

COPY web-admin/package.json web-admin/pnpm-lock.yaml ./
# BuildKit 缓存 pnpm store；提高 fetch 重试与超时，缓解 npmmirror ETIMEDOUT
RUN --mount=type=cache,id=zkxw-pnpm-store,target=/root/.local/share/pnpm/store \
    pnpm config set registry "${NPM_REGISTRY}" \
    && pnpm config set fetch-retries 5 \
    && pnpm config set fetch-retry-mintimeout 60000 \
    && pnpm config set fetch-retry-maxtimeout 600000 \
    && pnpm config set network-timeout 600000 \
    && pnpm install --frozen-lockfile

COPY web-admin/ .
# docker 模式：esbuild 压缩 + 关闭 devtools/预压缩，降低构建内存（见 vite.config.ts）
RUN pnpm exec vite build --mode docker

FROM ${NGINX_IMAGE}

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

EXPOSE 80

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