# Pay-Switch Docker 镜像
# 包含：Python 3.12 + Playwright + Chromium + Xvfb + noVNC
#
# 使用说明：
#   docker compose -f docker/docker-compose.yml up -d
#   # 访问 http://localhost:6080/vnc.html 查看浏览器
#   # 执行: docker compose -f docker/docker-compose.yml exec payswitch payswitch --help

FROM node:20-slim AS frontend-builder

WORKDIR /src/frontend
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build


FROM python:3.12-slim

# --------------------------------------------------------------------------- #
# 系统依赖
#   xvfb        : 虚拟帧缓冲（无头显示）
#   x11vnc      : 将 X11 显示暴露为 VNC 服务
#   novnc       : Web VNC 客户端静态资源
#   websockify  : 将 WebSocket 代理到 VNC TCP 端口（noVNC 通信桥）
#   xterm       : 轻量终端，方便调试
#   fonts-wqy-zenhei / fonts-noto-cjk : 中文字体，防止中文页面乱码
# --------------------------------------------------------------------------- #
RUN apt-get update && apt-get install -y --no-install-recommends \
        xvfb \
        x11vnc \
        novnc \
        websockify \
        xterm \
        fonts-wqy-zenhei \
        fonts-noto-cjk \
    && rm -rf /var/lib/apt/lists/*

# --------------------------------------------------------------------------- #
# 安装 payswitch 及全部可选依赖
#   [smart]  : openai — AI 辅助功能
#   [remote] : websockify Python 包（noVNC 远程访问）
# --------------------------------------------------------------------------- #
WORKDIR /app
COPY . /app
COPY --from=frontend-builder /src/frontend/dist /app/frontend/dist
RUN pip install --no-cache-dir ".[smart,remote,stripe]"

# --------------------------------------------------------------------------- #
# 安装 Playwright Chromium 浏览器及其系统级依赖
# playwright install-deps 会自动补全 Chromium 运行所需的共享库
# --------------------------------------------------------------------------- #
RUN playwright install chromium && playwright install-deps chromium

# --------------------------------------------------------------------------- #
# 环境变量
#   DISPLAY              : Xvfb 虚拟显示标识，与 entrypoint.sh 保持一致
#   PAYSWITCH_NOVNC_PORT   : noVNC 监听端口（容器内）
# --------------------------------------------------------------------------- #
ENV DISPLAY=:99
ENV PAYSWITCH_NOVNC_PORT=6080

# 对外暴露 noVNC Web 端口
EXPOSE 6080
EXPOSE 8787

# 复制并授权入口脚本
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
# 默认启动完整 Pay-Switch Agent 服务，同时保留 noVNC 人工授权界面
CMD ["payswitch", "serve", "--host", "0.0.0.0", "--port", "8787"]
