# === 基础配置 ===

# 调试模式（true: 输出详细日志到控制台）
# 示例: false（生产环境关闭）
DEBUG: false

# 服务器监听端口
# 示例: 8080, 3000
PORT: 3152

# 服务器监听地址
# 0.0.0.0: 监听所有网络接口（可在局域网内访问）
# localhost 或 127.0.0.1: 仅本机访问
# 示例: "localhost", "192.168.1.100"
HOST: localhost

# PDF 文件输出目录（相对路径或绝对路径）
# 示例: "/tmp/pdf-output", "./pdfs"
OUTPUT_DIR: ./output

# === 网络配置 ===

# WebSocket 最大负载（字节）
# 示例: 134217728 (128MB)
WS_MAX_PAYLOAD: 134217728

# === HTTP API 配置 ===

# 是否启用HTTP API（默认true）
# 示例: true（启用）, false（禁用）
HTTP_API_ENABLED: false

# HTTP API任务状态保留时间（分钟）
# 任务完成后，状态信息会保留指定时间，之后自动清理
# 示例: 5 (5分钟), 10 (10分钟)
HTTP_API_TASK_RETENTION_MINUTES: 5

# HTTP请求超时时间（毫秒）
# 示例: 30000 (30秒), 60000 (60秒)
HTTP_TIMEOUT: 15000

# CORS 跨域配置
# 是否启用CORS（默认false）
# 示例: true（启用）, false（禁用）
CORS_ENABLED: false

# CORS允许的源列表
# 空数组表示允许所有源（仅在CORS_ENABLED=true时有效）
# 示例: ["http://localhost:3000", "https://example.com"]
# 特殊值 "*" 表示允许所有源
CORS_ALLOWED_ORIGINS: []

# === 日志配置 ===

# 日志记录等级
# 可选值:
#   - DEBUG: 调试信息（最详细）
#   - INFO: 一般信息
#   - WARN: 警告信息
#   - ERROR: 错误信息
#   - FATAL: 致命错误（最简洁）
# 示例: "INFO", "DEBUG", "WARN"
LOG_LEVEL: INFO

# 日志模块过滤列表
# 只收集指定模块的日志，空数组表示收集所有模块
# 模块名对应关系:
#   - "Main": 主程序模块（程序启动、关闭、系统托盘等）
#   - "Config": 配置加载模块（配置文件读取、解析、合并）
#   - "Server": HTTP服务器模块（WebSocket连接、HTTP请求处理、健康检查）
#   - "PrinterManager": 打印管理器模块（打印任务调度、打印机状态管理）
#   - "TemplateRenderer": 模板渲染器模块（PDF生成、图像处理、模板应用）
#   - "ForwardManager": 转发管理器模块（打印任务转发、节点健康检查）
# 示例:
#   - ["Server", "PrinterManager"]: 只收集服务器和打印相关日志
#   - ["Main", "Config"]: 收集主程序和配置加载模块日志
#   - []: 收集所有模块日志（默认）
LOG_MODULES: ["Main", "Config"]

# 日志文件保留天数
# 超过此天数的日志将被自动清理
# 示例: 7, 90, 365
LOG_RETENTION_DAYS: 30

# 日志清理任务执行间隔（毫秒）
# 示例:
#   - 3600000  (1小时)
#   - 43200000 (12小时)
#   - 86400000 (24小时)
LOG_CLEANUP_INTERVAL: 86400000

# === 字体和系统配置 ===

# 字体缓存过期时间（毫秒）
# 用于减少系统字体扫描开销
# 示例: 3600000 (1小时), 604800000 (7天)
FONT_CACHE_EXPIRY: 86400000

# 注册表查询缓冲区大小（字节）
# 用于读取 Windows 注册表中的系统字体信息
# 示例: 20971520 (20MB), 5242880 (5MB)
REGISTRY_BUFFER_SIZE: 10485760

# === 打印配置 ===

# 打印回退模式的重试延迟（毫秒）
# 用于避免打印队列冲突
# 示例: 2000, 3000, 500
FALLBACK_PRINT_DELAY: 1000

# 打印任务名称（显示在打印队列）
# 示例: "PDFBadge", "MyPrintJob"
PRINT_JOB_NAME: PDFBadge

# 直接打印模式的工作协程数量（并发处理图片数）
# 示例: 5, 10, 20
DIRECT_PRINT_WORKERS: 10

# 直接打印模式的队列大小（缓冲任务数）
# 示例: 50, 200, 500
DIRECT_PRINT_QUEUE_SIZE: 200

# 直接打印模式的图片处理超时时间（毫秒）
# 示例: 60000 (60秒), 120000 (2分钟)
DIRECT_PRINT_TIMEOUT: 30000

# 直接打印模式的重试次数
# 示例: 1, 3, 5
DIRECT_PRINT_RETRY_COUNT: 1

# 直接打印模式的重试延迟（毫秒）
# 示例: 2000, 3000, 5000
DIRECT_PRINT_RETRY_DELAY: 500

# 跳过重新编码（减少处理时间）
# 示例: false（强制重新编码）
DIRECT_PRINT_SKIP_REENCODE: true

# 二进制传输模式（提高传输效率）
# 示例: false（使用文本传输）
DIRECT_PRINT_BINARY_MODE: true

# === 图片处理配置 ===

# 图片压缩质量（1-100，JPEG有效）
# 示例: 90 (高质量), 70 (较小文件), 50 (最小文件)
IMAGE_COMPRESSION_QUALITY: 90

# 图片颜色模式
# 可选值:
#   - color: 彩色模式
#   - grayscale: 黑白灰度模式（减少文件大小）
# 示例: "grayscale"
IMAGE_COLOR_MODE: color

# === 性能优化配置 ===

# 图像缓存大小（缓存的最大图像数量）
# 用于避免重复处理相同的图像数据
# 示例: 50, 100, 200
IMAGE_CACHE_SIZE: 100

# 启用批量打印优化（单进程处理多个图片）
# 示例: false（逐个处理）
PRINT_BATCH_OPTIMIZATION: true

# 隐藏PowerShell窗口（减少视觉干扰）
# 示例: false（显示窗口）
PRINT_HIDE_POWERSHELL: true

# 启用内存优化模式（减少临时文件I/O）
# 示例: false（使用临时文件）
PRINT_MEMORY_OPTIMIZATION: true

# === 打印任务转发配置 ===

# 总启用开关：控制整个转发功能的开启/关闭
# 示例: true（启用转发）, false（禁用转发）
FORWARD_ENABLED: false

# 本地打印开关：是否同时启用本地打印
# 示例: true（启用本地打印）, false（禁用本地打印）
LOCAL_PRINT_ENABLED: true

# 转发节点健康检查间隔（毫秒）
# 示例: 30000 (30秒), 60000 (1分钟)
FORWARD_HEALTH_CHECK_INTERVAL: 15000

# 任务转发调度策略
# 可选值:
#   - round_robin: 轮询（按顺序依次分配任务）
#   - random: 随机（随机选择可用节点）
#   - weighted: 权重（根据节点权重比例分配任务）
# 示例: "round_robin", "random", "weighted"
FORWARD_STRATEGY: round_robin

# 任务最大转发跳数（防止回路）
# 超过此跳数的任务将转至本地或丢弃
# 示例: 3, 5, 10
FORWARD_MAX_HOPS: 3

# 转发失败时是否回退到本地打印
# 示例: true（启用回退）, false（不回退）
FORWARD_FALLBACK_TO_LOCAL: true

# 转发节点配置列表（支持动态添加/删除/编辑）
# 每个节点包含: 名称、主机、端口、权重、是否启用
# 示例: []
FORWARD_NODES:
  - name: "Node1"
    host: "192.168.1.10"
    port: 3152
    weight: 10
    enabled: false
  - name: "Node2"
    host: "192.168.1.20"
    port: 3152
    weight: 5
    enabled: false
  - name: "Node3"
    host: "192.168.1.30"
    port: 3152
    weight: 5
    enabled: false
