# ---------- 阶段1：前端编译（Node打包静态产物） ----------
FROM node:22-alpine AS frontend-builder

WORKDIR /frontend

# 复制前端依赖，利用Docker缓存优化
COPY frontend/package*.json ./
RUN npm install --registry=https://registry.npmmirror.com

# 复制前端代码，编译出静态产物
COPY frontend/ .
RUN npm run build

# ---------- 阶段2：后端依赖构建（uv构建虚拟环境） ----------
FROM python:3.11-slim AS backend-builder

WORKDIR /backend

# 安装uv，同步Python依赖
COPY backend/pyproject.toml backend/uv.lock ./
RUN --mount=type=cache,target=/root/.cache/uv \
    pip install --no-cache-dir uv && \
    uv sync --frozen --no-dev --index https://pypi.tuna.tsinghua.edu.cn/simple/

# 复制后端代码
COPY backend/app ./app
COPY backend/main.py ./

# ---------- 阶段3：最终运行镜像（仅Python+Uvicorn，托管前端静态） ----------
FROM python:3.11-slim

WORKDIR /app

# 复制构建好的后端虚拟环境
COPY --from=backend-builder /backend/.venv /app/.venv
COPY --from=backend-builder /backend/app /app/app
COPY --from=backend-builder /backend/main.py /app/main.py

# 复制前端编译好的静态产物，放到后端能访问的目录
# 这里我们把静态文件放到 /app/static 目录
COPY --from=frontend-builder /frontend/dist /app/app/static

# 把venv加入PATH
ENV PATH="/app/.venv/bin:$PATH"

# 暴露Uvicorn端口
EXPOSE 8000

# 直接启动Uvicorn，由Uvicorn配合后端框架托管静态文件
CMD ["python3", "main.py"]