# ============================================================
# Docker 镜像仓库加速（默认使用 docker.1ms.run 国内代理）
# 如需切换回 Docker Hub：
#   docker compose build --build-arg REGISTRY_MIRROR=docker.io/library
# ============================================================
ARG REGISTRY_MIRROR=docker.1ms.run/library

# ============================================================
# Stage 1: 前端构建（Vue 3 + Vite）
# ============================================================
FROM ${REGISTRY_MIRROR}/node:22-alpine AS frontend-builder

WORKDIR /frontend

COPY frontend-vue/package.json frontend-vue/package-lock.json ./

RUN npm ci

COPY frontend-vue/ ./

RUN npm run build

# ============================================================
# Stage 2: 后端构建（Maven + Java 8）
# ============================================================
FROM ${REGISTRY_MIRROR}/maven:3.9.6-eclipse-temurin-8 AS builder

# Maven JVM 调优：增大堆内存、启用并行
ENV MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m -Djava.util.concurrent.ForkJoinPool.common.parallelism=4"

WORKDIR /app

# 使用阿里云 Maven 镜像加速依赖下载（替换 Maven Central）
COPY maven-settings.xml /root/.m2/settings.xml

COPY pom.xml .

RUN --mount=type=cache,target=/root/.m2 \
    mvn -B -DskipTests -T 1C dependency:go-offline

COPY src ./src

# 将前端构建产物注入静态资源目录（Maven 会自动打包进 jar）
# vite.config.js 中 outDir 为相对 __dirname 的路径，容器内 __dirname=/frontend
COPY --from=frontend-builder /src/main/resources/static/v2 /app/src/main/resources/static/v2

# 前端产物已由 frontend-builder 阶段构建并 COPY 进来；
# 此阶段不含 frontend-vue/，且离线模式无法下载 Node，必须跳过前端构建。
# -T 1C: 按 CPU 核数并行; -o: 离线模式（依赖已缓存，跳过元数据检查）
RUN --mount=type=cache,target=/root/.m2 \
    mvn -B -DskipTests -T 1C -o clean package -Dskip.frontend.build=true

# ============================================================
# Stage 3: 运行镜像（最小化 JRE）
# ============================================================
FROM ${REGISTRY_MIRROR}/eclipse-temurin:8-jre-alpine
WORKDIR /app

COPY --from=builder /app/target/svn-log-tool-1.0.0-jar-with-dependencies.jar app.jar

EXPOSE 18088

ENTRYPOINT ["java", "-jar", "/app/app.jar"]
