"""
工作手机SDK v3.0 - 配置管理
"""

try:
    from pydantic_settings import BaseSettings
except ImportError:  # NAS / pydantic v1 降级
    from pydantic import BaseSettings
from typing import Optional


class Settings(BaseSettings):
    """应用配置"""
    
    # 环境
    ENV: str = "development"
    DEBUG: bool = True
    
    # API密钥
    API_KEY: str = "workphone-secret-key"
    API_AUTH_ENABLED: bool = False
    DEVICE_PAIRING_TOKEN: str = ""
    
    # MongoDB
    MONGO_URI: str = "mongodb://localhost:27017"
    MONGO_DB: str = "workphone_sdk"
    
    # Redis
    REDIS_URL: str = "redis://localhost:6379/1"
    
    # AI Agent
    DEEPSEEK_API_KEY: Optional[str] = None
    DEEPSEEK_BASE_URL: str = "https://api.deepseek.com/v1"
    DEEPSEEK_MODEL: str = "deepseek-chat"
    
    # WebSocket（需求：5s/10s 可配置）
    WS_HEARTBEAT_INTERVAL: int = 10  # 秒，支持 5/10/30
    WS_TIMEOUT: int = 120  # 秒；长任务（微信登录/u2）期间配合 command_grace 防误踢
    
    # 设备命令
    COMMAND_TIMEOUT: int = 30  # 秒，通用指令等待
    MESSAGE_SEND_TIMEOUT: int = 60  # 秒，发消息专用（可配置，避免无限挂起）
    WECHAT_BACKEND_ONLY: bool = True  # 微信动作仅允许后端 Hook，不允许 UI 通道回退
    WECHAT_WS_HOOK_ONLY: bool = True  # 微信仅 WebSocket Agent + Frida，禁止服务端 ADB 直连/ u2 降级
    WORKPHONE_WS_FIRST: bool = True  # 无线主控：execute/probe 优先 WS Agent；主机 ADB 仅运维/兜底
    WORKPHONE_HOST_ADB_PROBE: bool = False  # hook/probe 是否允许主机 adb+frida 探测（默认关，纯 WS）

    # 宝塔侧 Frida 反向隧道。手机仅负责维持隧道，微信 RPC 在 SDK 容器内执行。
    SERVER_FRIDA_ENABLED: bool = False
    SERVER_FRIDA_HOST: str = "172.18.0.1"
    SERVER_FRIDA_PORT: int = 14538
    SERVER_FRIDA_DEVICE_ID: str = ""  # 留空表示接受任意在线设备；生产建议填写真机 ID

    # AI 心跳任务队列：0 表示无上限（每周期抽空队列 / 队列不截断）
    AI_HEARTBEAT_TASK_BATCH: int = 0
    AI_HEARTBEAT_QUEUE_MAXLEN: int = 0

    # 设备连接方案 · 可切换驱动层（Connection Provider）
    CONNECTION_ACTIVE_PROVIDER: str = "jiqing"  # 全局默认方案：jiqing/aochuang/legacy/custom_*
    # 奥创工作手机（007 私域）HTTP 驱动
    AOCHUANG_BASE_URL: Optional[str] = None     # 如 https://007.siyuguanli.com/api
    AOCHUANG_TOKEN: Optional[str] = None
    # 现有连接形式（S2/旧接口/自建工作手机）
    LEGACY_PROVIDER_BASE_URL: Optional[str] = None
    LEGACY_PROVIDER_TOKEN: Optional[str] = None
    
    class Config:
        env_file = ".env"
        extra = "ignore"


settings = Settings()
