# syntax=docker/dockerfile:1.7

##############################
# 1) Base: Python 3.12 on Debian 12 (bookworm), slim 版
##############################
FROM python:3.12-slim-bookworm AS base

# 取得套件清單、升級現有套件，並清理快取檔，縮小映像檔
RUN --mount=type=cache,target=/var/cache/apt \
    apt-get update \
 && apt-get -y upgrade \
 && apt-get install -y --no-install-recommends ca-certificates curl \
 && rm -rf /var/lib/apt/lists/*

##############################
# 2) Tool stage: 從 uv 官方映像抓可執行檔
##############################
FROM ghcr.io/astral-sh/uv:latest AS uvbin

##############################
# 3) Runtime: 把 uv 複製進來 + 建置專案
##############################
FROM base AS runtime

# 複製 uv 執行檔
COPY --from=uvbin /uv /usr/local/bin/uv

# 設定工作目錄
WORKDIR /app

# --- 快取關鍵：先複製相依檔，再安裝 ---
# 若你用 pyproject/uv.lock
COPY pyproject.toml uv.lock* ./
# 若你是 requirements.txt 流程，也一起複製（可選）
COPY requirements.txt* ./

# 安裝相依（優先使用 uv 的鎖定檔）
# 1) 有 pyproject.toml/uv.lock：同步相依，但先不安裝專案本身（no-install-project）
# 2) 否則退回 requirements.txt（若不存在此檔，指令會忽略）
RUN set -eux; \
    if [ -f "pyproject.toml" ]; then \
        uv sync --frozen --no-dev --no-install-project; \
    fi; \
    if [ -f "requirements.txt" ]; then \
        uv pip install -r requirements.txt; \
    fi

# 最後才複製所有程式碼（讓上面相依可以被 Docker layer 快取）
COPY . .

# 設 PYTHONPATH，讓程式能找到專案根目錄的模組
ENV PYTHONPATH=/app

# 建立非 root 使用者，並給予 /app 權限
RUN useradd -m -u 10001 app \
 && chown -R app:app /app
USER app

# 預設用 uv 的虛擬環境執行 Python（更安全、可重現）
# 依你的專案啟動方式擇一：
# - 若有 app 套件並可 python -m app 啟動
CMD ["uv", "run", "python", "-m", "app"]
# - 或改為執行 main.py：
# CMD ["uv", "run", "python", "main.py"]
