# -*- coding: utf-8 -*-
# 租金通知系统 —— 云端镜像
# 底座用服务器本地已有的 python:3.11.3-slim（离线可用，无需拉取）
# 依赖全部以 wheel 形式随包带入（openpyxl / reportlab / pillow / charset-normalizer）；
# wecom-cli 用官方 Linux 二进制随包带入。构建期不联网。
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 的 manylinux2014 wheel，apt 无新增（pillow wheel 自带图像库）
COPY 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） ----
# 放到 PATH 上，rentos/wecom.py 的 shutil.which("wecom-cli") 即可命中，无需改代码。
# 凭据**不打进镜像**，运行时由 /opt/rentos/wecom-config 挂到 /root/.config/wecom。
COPY wecom/wecom-cli /usr/local/bin/wecom-cli
RUN chmod 755 /usr/local/bin/wecom-cli \
 && /usr/local/bin/wecom-cli --version

# ---- 3. 应用代码 ----
COPY app/rentos/          /app/rentos/
COPY app/build_notices.py /app/build_notices.py
COPY app/web/             /app/web/
COPY app/assets/          /app/assets/
COPY app/templates/       /app/templates/

# ---- 3b. 构建期自检：中文字体随包带上 + PDF 渲染链可用 ----
# simhei.ttf 是 asset 的一部分（约 9.7MB），缺失时会回落到 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"]
