import logging
from ..config import settings
import os

logger: logging.Logger = logging.getLogger("emc")

# 从环境变量读取 LOG_LEVEL，默认为 INFO
# 使用 .upper() 确保兼容环境变量写成小写的情况（如 log_level=debug）
env_log_level = os.getenv("LOG_LEVEL", "INFO").upper()


def setup_logging() -> None:
    """
    初始化日志配置。所有日志输出到控制台，同时将错误日志定向输出到错误日志文件中。
    """
    # 避免重复添加 Handler（防止在某些环境下日志翻倍打印）
    if not logger.handlers:
        # 将字符串级别转换为 logging 对应的常量
        # 如果环境变量是非法字符，getLevelName 会返回字符串，此时默认设为 INFO
        level = logging.getLevelName(env_log_level)
        if not isinstance(level, int):
            level = logging.INFO

        # 设置总控级别
        logger.setLevel(level)

        # 定义日志格式
        formatter = logging.Formatter(
            "[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
            datefmt="%Y-%m-%d %H:%M:%S"
        )

        # 创建控制台处理器 (StreamHandler)
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)  # 控制台打印 INFO 及以上级别
        console_handler.setFormatter(formatter)

        # 创建文件处理器 (FileHandler) - 专门记录错误
        # mode='a' 表示追加模式，encoding='utf-8' 防止中文乱码
        error_file_handler = logging.FileHandler(
            settings.error_log_path, mode="a", encoding="utf-8"
        )
        error_file_handler.setLevel(logging.ERROR)  # 关键：只记录 ERROR 及以上级别
        error_file_handler.setFormatter(formatter)

        # 将处理器添加到 logger
        logger.addHandler(console_handler)
        logger.addHandler(error_file_handler)
