# ==============================
# 灵台 · 魂镜后端镜像（Backend / FastAPI）：Python 3.12 + uv
# 启动入口 entrypoint.sh：先按 *_ENABLED 开关用 wait-for-it 等待依赖就绪，再 uv run python -m app.main
# 工作目录 /app/backend，使 .env 中的相对路径 ../db ../logs ../config ../storage 解析到 /app 下。
# ==============================
FROM python:3.12-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    UV_LINK_MODE=copy \
    UV_COMPILE_BYTECODE=1 \
    TZ=Asia/Shanghai

WORKDIR /app/backend

# 系统依赖：
#   build-essential / libpq-dev —— 编译 asyncpg、argon2 等 C 扩展
#   curl            —— 容器健康检查
#   tzdata          —— 时区数据
#   netcat-openbsd  —— wait-for-it 端口探测
RUN apt-get update && apt-get install -y --no-install-recommends \
        build-essential libpq-dev curl tzdata netcat-openbsd \
    && rm -rf /var/lib/apt/lists/* \
    && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" > /etc/timezone

# 安装 uv（沿用 backend/pyproject.toml 的清华镜像源，加速国内构建）
RUN pip install --no-cache-dir uv -i https://pypi.tuna.tsinghua.edu.cn/simple

# 先复制依赖清单，最大化 Docker 层缓存命中
COPY backend/pyproject.toml backend/uv.lock ./

# 安装生产依赖（排除 dev 组、暂不安装项目本体）
RUN uv sync --frozen --no-dev --no-install-project

# 复制后端源码并安装项目本体
COPY backend/ ./
RUN uv sync --frozen --no-dev

# 启动顺序：wait-for-it（端口探测工具）+ entrypoint.sh（按开关动态等待依赖后启动应用）
COPY docker/backend/wait-for-it.sh /usr/local/bin/wait-for-it.sh
COPY docker/backend/entrypoint.sh /app/backend/entrypoint.sh
RUN chmod +x /usr/local/bin/wait-for-it.sh /app/backend/entrypoint.sh

EXPOSE 8000

# entrypoint 等待依赖就绪后 exec 应用；如需覆盖启动命令，覆盖此 ENTRYPOINT 即可
ENTRYPOINT ["/app/backend/entrypoint.sh"]
