# -*- coding: utf-8 -*-
# 租金通知系统 —— 云端镜像
# ---------------------------------------------------------------
# 构建上下文 = **仓库根**（git 工作副本），路径直接取自仓库结构。
# 这样服务器只需 `git pull` 即可获得完整构建材料：
#   deploy/wheels/          离线 wheel（openpyxl / reportlab / pillow / charset-normalizer）
#   deploy/wecom/*.tgz      企业微信官方 Linux CLI
#   assets/fonts/simhei.ttf 中文字体（PDF 出单必需）
# 底座 python:3.11.3-slim 为服务器本地已有镜像，构建期零联网。
# ---------------------------------------------------------------
FROM python:3.11.3-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    TZ=Asia/Shanghai \
    LANG=C.UTF-8 \
    HOME=/root

WORKDIR /app

# ---- 1. 离线安装运行期依赖 ----
#   openpyxl            台账 / 批次数据导出 xlsx
#   reportlab + pillow  收费通知书直接绘制 PDF（2026-10-12 起统一 PDF，不依赖 Office）
#   charset-normalizer  reportlab 的依赖
# 全部为 cp311 / py3 的 manylinux wheel，apt 无新增（pillow wheel 自带图像库）
COPY deploy/wheels/ /wheels/
RUN pip install --no-index --find-links=/wheels \
        openpyxl reportlab pillow charset-normalizer \
 && rm -rf /wheels

# ---- 2. 企业微信官方 CLI（Linux 静态二进制，@wecom/cli-linux-x64 1.3.4）----
# 从仓库内 tgz 解压（包结构 package/bin/wecom-cli），落到 PATH 上即可被
# rentos/wecom.py 的 shutil.which("wecom-cli") 命中，无需改代码。
# 凭据**不打进镜像**，运行时由 /opt/rentos/wecom-config 挂到 /root/.config/wecom。
COPY deploy/wecom/cli-linux-x64.tgz /tmp/wecom.tgz
RUN tar xzf /tmp/wecom.tgz -C /tmp \
 && mv /tmp/package/bin/wecom-cli /usr/local/bin/wecom-cli \
 && chmod 755 /usr/local/bin/wecom-cli \
 && rm -rf /tmp/package /tmp/wecom.tgz \
 && /usr/local/bin/wecom-cli --version

# ---- 3. 应用代码（仓库根布局）----
COPY rentos/          /app/rentos/
COPY build_notices.py /app/build_notices.py
COPY web/             /app/web/
COPY assets/          /app/assets/
COPY templates/       /app/templates/
# 维护脚本随镜像带上：服务器无 Python 3（yum 仅 3.6.8，项目需 3.7+），
# 台账迁移 / 数据核对只能在容器内执行。
COPY tools/           /app/tools/

# ---- 3b. 构建期自检：中文字体随包带上 + PDF 渲染链可用 ----
# simhei.ttf 缺失时会回落到 CID 字体、中文有缺字风险；这里直接注册一次，
# 构建失败即暴露问题，不要等到线上出单才发现。
RUN test -s /app/assets/fonts/simhei.ttf \
 && python -c "from reportlab.pdfbase import pdfmetrics; \
from reportlab.pdfbase.ttfonts import TTFont; \
pdfmetrics.registerFont(TTFont('simhei','/app/assets/fonts/simhei.ttf')); \
import PIL, reportlab; print('PDF 渲染链 OK: reportlab', reportlab.Version, '/ pillow', PIL.__version__)"

# ---- 4. 运行期目录（实际由 volume 覆盖，此处保证镜像可独立运行）----
RUN mkdir -p /app/data /app/output /app/logs /app/uploads /app/output/exports \
            /root/.config/wecom

EXPOSE 8899

# 定时发送已启用（容器内可用 wecom-cli 直发企业微信）
CMD ["python", "-m", "rentos.server", "--host", "0.0.0.0", "--port", "8899"]
