import logging
import os
from logging.handlers import TimedRotatingFileHandler

# 全域 Logger 實例
_global_logger = None

def setup_logger(name: str, log_dir: str = "logs", level=logging.DEBUG) -> logging.Logger:
    global _global_logger

    if _global_logger is None:
        # 確保 logs 資料夾存在
        os.makedirs(log_dir, exist_ok=True)

        # 建立全域 Logger
        _global_logger = logging.getLogger("global_logger")
        _global_logger.setLevel(level)
        _global_logger.propagate = False  # 防止重複輸出

        formatter = logging.Formatter(
            fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s",
            datefmt="%m-%d %H:%M:%S"
        )

        # 檔案輸出（每天輪替）
        file_handler = TimedRotatingFileHandler(
            filename=os.path.join(log_dir, "application.log"),
            when="midnight",  # 每天 0 點輪替
            backupCount=7,    # 保留 7 天
            encoding="utf-8"
        )
        file_handler.setFormatter(formatter)
        _global_logger.addHandler(file_handler)

        # 終端機輸出
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        _global_logger.addHandler(console_handler)

    # 為每個模組建立子 Logger，並設定名稱
    module_logger = _global_logger.getChild(name)
    module_logger.name = name  # 修改子 Logger 的名稱，僅保留子 Logger 名稱
    return module_logger
