FROM python:3.10-slim

WORKDIR /app

# 安装系统依赖（Playwright 需要）
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget gnupg curl \
    libnss3 libnspr4 libatk1.0-0t64 libatk-bridge2.0-0t64 \
    libcups2t64 libdrm2 libdbus-1-3 libxkbcommon0 \
    libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
    libgbm1 libpango-1.0-0 libcairo2 libasound2t64 \
    && rm -rf /var/lib/apt/lists/*

# 安装 Python 依赖（使用国内镜像源加速）
COPY requirements.txt .
RUN pip install --no-cache-dir \
    -i https://pypi.tuna.tsinghua.edu.cn/simple \
    --trusted-host pypi.tuna.tsinghua.edu.cn \
    --retries 5 --timeout 120 -r requirements.txt

# 安装 Playwright Chromium（Linux 版本）
RUN playwright install chromium

# 创建必要目录
RUN mkdir -p /app/data/screenshots /app/data/reports \
    /app/frontend/dist /app/logs

# 注意：以下内容通过 volume 挂载，不 COPY 进镜像
# - backend/ 源码 → /app
# - frontend/dist/ → /app/frontend/dist
# - data/ → /app/data
# - logs/ → /app/logs

EXPOSE 80

# 启动 uvicorn，监听 80 端口（同时提供 API + 前端静态文件）
# --loop asyncio：禁用 uvloop。根因——uvloop(libuv) 与 Playwright sync API 的
# greenlet 线程桥接不兼容，在工作线程调用 sync_playwright().start() 会永久死锁
# （容器内多次复现）。强制默认 asyncio 事件循环即可正常执行用例。
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--loop", "asyncio"]