"""配置管理模块"""
import os
from dataclasses import dataclass
from typing import Optional


@dataclass
class LogConfig:
    """日志配置类"""
    
    # 应用名称
    app_name: str
    
    # 服务器地址
    server_url: str = "http://localhost:8080"
    
    # 传输协议: http 或 grpc
    transport: str = "http"
    
    # 异步队列大小
    queue_maxsize: int = 10000
    
    # 批量发送大小
    batch_size: int = 100
    
    # 批量发送间隔（秒）
    batch_interval: float = 1.0
    
    # 本地缓存路径
    cache_dir: Optional[str] = None
    
    # 缓存最大大小（MB）
    cache_max_size_mb: int = 10
    
    # 缓存保留天数
    cache_retention_days: int = 7
    
    # 重试次数
    max_retries: int = 3
    
    # 重试间隔（秒）
    retry_interval: float = 1.0
    
    # 连接超时（秒）
    timeout: float = 5.0
    
    # 熔断器阈值（连续失败次数）
    circuit_breaker_threshold: int = 3
    
    # 熔断器恢复时间（秒）
    circuit_breaker_timeout: float = 60.0
    
    # 是否启用压缩
    enable_compression: bool = True
    
    # 日志级别
    log_level: str = "INFO"
    
    def __post_init__(self):
        """初始化后处理"""
        if self.cache_dir is None:
            # 默认缓存目录
            home = os.path.expanduser("~")
            self.cache_dir = os.path.join(home, ".easy_log")
        
        # 确保缓存目录存在
        os.makedirs(self.cache_dir, exist_ok=True)
        
        # 验证传输协议
        if self.transport not in ["http", "grpc"]:
            raise ValueError(f"不支持的传输协议: {self.transport}")
        
        # 验证日志级别
        valid_levels = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
        if self.log_level.upper() not in valid_levels:
            raise ValueError(f"无效的日志级别: {self.log_level}")
    
    @property
    def cache_db_path(self) -> str:
        """获取缓存数据库路径"""
        return os.path.join(self.cache_dir, "cache.db")
