FROM python:3.11-slim

# System dependencies for PyMuPDF and general build
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        gcc g++ libffi-dev curl && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Install Python dependencies
# 1) 先单独 COPY requirements.txt，利用 Docker 层缓存：
#    只要 requirements.txt 没变，下面的 pip install 层会直接命中缓存。
# 2) 使用 BuildKit cache mount 持久化 pip 下载缓存：
#    即使 requirements.txt 变了，已下载过的包也不用重新下载。
COPY backend/requirements.txt /app/requirements.txt
# 安装顺序很重要：
# 1) 先装 requirements（rapidocr 会拉入 opencv-python 带 GUI 版本）
# 2) 最后强制装 opencv-python-headless 覆盖，避免 libxcb.so 等 X11 依赖
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install -r requirements.txt && \
    pip install --force-reinstall --no-deps opencv-python-headless

# Copy application code (代码变更不会触发依赖重装)
COPY backend/ /app/

# Create file storage directory (bind-mounted at runtime)
RUN mkdir -p /data/files

# Celery worker — the only containerised application service
CMD ["celery", "-A", "app.tasks.celery_app:celery_app", "worker", \
     "--loglevel=info", "--pool=solo", "--concurrency=1"]
