import logging
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path

from app.utils.request_context import get_request_id


def get_logger(name: str = "app") -> logging.Logger:
    logger = logging.getLogger(name)
    if logger.handlers:
        return logger

    log_dir = Path("logs")
    log_dir.mkdir(exist_ok=True)
    log_path = log_dir / "app.log"

    class RequestIdFilter(logging.Filter):
        def filter(self, record: logging.LogRecord) -> bool:
            record.request_id = get_request_id() or "-"
            return True

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)s %(name)s %(request_id)s %(message)s"
    )

    file_handler = TimedRotatingFileHandler(
        log_path,
        when="midnight",
        interval=1,
        backupCount=10,
        utc=True,
    )
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)
    file_handler.addFilter(RequestIdFilter())

    logger.setLevel(logging.INFO)
    logger.addHandler(file_handler)

    return logger
