"""
QQ机器人配置管理模块
"""
import os
from typing import Optional
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()


def _read_env(name: str, default: Optional[str] = None) -> Optional[str]:
    """
    读取并清洗环境变量。
    - 去除首尾空白
    - 空字符串视为未设置
    - 以 # 开头的值视为注释占位，视为未设置
    """
    value = os.getenv(name)
    if value is None:
        return default
    
    value = value.strip()
    if not value or value.startswith('#'):
        return default
    
    return value


class Config:
    """机器人配置类"""
    
    # 机器人基本信息
    BOT_APPID = _read_env('BOT_APPID', '') or ''
    BOT_SECRET = _read_env('BOT_SECRET', '') or ''
    
    # 日志配置
    LOG_LEVEL = _read_env('LOG_LEVEL', 'INFO') or 'INFO'
    
    # 沙箱模式
    SANDBOX_MODE = os.getenv('SANDBOX_MODE', 'False').lower() == 'true'
    
    # AI配置
    AI_PROVIDER = _read_env('AI_PROVIDER', 'openai') or 'openai'
    AI_MODEL = _read_env('AI_MODEL', 'gpt-4') or 'gpt-4'
    AI_API_KEY = _read_env('AI_API_KEY', '') or ''
    AI_API_BASE = _read_env('AI_API_BASE', None)
    
    # AI嵌入模型配置（用于RAG）
    AI_EMBED_PROVIDER = _read_env('AI_EMBED_PROVIDER', 'openai') or 'openai'
    AI_EMBED_MODEL = _read_env('AI_EMBED_MODEL', 'text-embedding-3-small') or 'text-embedding-3-small'
    AI_EMBED_API_KEY = _read_env('AI_EMBED_API_KEY', None)  # 留空则使用 AI_API_KEY
    AI_EMBED_API_BASE = _read_env('AI_EMBED_API_BASE', None)  # 留空则使用 AI_API_BASE
    
    # 向量数据库配置
    AI_USE_VECTOR_DB = os.getenv('AI_USE_VECTOR_DB', 'true').lower() == 'true'
    
    @classmethod
    def validate(cls):
        """验证配置是否完整"""
        if not cls.BOT_APPID:
            raise ValueError("BOT_APPID 未配置")
        if not cls.BOT_SECRET:
            raise ValueError("BOT_SECRET 未配置")
        
        # AI配置验证（可选）
        if cls.AI_API_KEY:
            print(f"✅ AI配置: {cls.AI_PROVIDER}/{cls.AI_MODEL}")
        else:
            print("⚠️ AI_API_KEY 未设置，AI功能将不可用")
        
        return True
