# ===========================
# 秒思智能审核平台 - Backend Dockerfile
# 多阶段构建，基于 python:3.13-slim
# ===========================

# ---------- Stage 1: 构建依赖 ----------
FROM python:3.13-slim AS builder

WORKDIR /build

# 安装编译依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖描述文件
COPY pyproject.toml .

# 安装 Python 依赖到 /build/deps
RUN pip install --no-cache-dir --prefix=/build/deps .

# ---------- Stage 2: 运行时镜像 ----------
FROM python:3.13-slim AS runtime

WORKDIR /app

# 安装运行时系统依赖（FFmpeg 用于视频处理，libpq 用于 PostgreSQL）
RUN apt-get update && apt-get install -y --no-install-recommends \
    ffmpeg \
    libpq5 \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 从 builder 阶段复制已安装的 Python 依赖
COPY --from=builder /build/deps /usr/local

# 复制应用代码
COPY app/ ./app/
COPY alembic/ ./alembic/
COPY alembic.ini .
COPY pyproject.toml .
COPY scripts/ ./scripts/

# 创建非 root 用户
RUN groupadd -r miaosi && useradd -r -g miaosi -d /app -s /sbin/nologin miaosi \
    && mkdir -p /tmp/videos \
    && chown -R miaosi:miaosi /app /tmp/videos

USER miaosi

EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

ENTRYPOINT ["./scripts/entrypoint.sh"]
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
