import logging
from logging.handlers import RotatingFileHandler

from app.core.config import settings

_FORMAT = "%(asctime)s | %(levelname)s | %(name)s | %(message)s"
_MAX_BYTES = 5 * 1024 * 1024
_BACKUPS = 5


def _file_handler(filename: str, level: int) -> RotatingFileHandler:
    settings.log_dir.mkdir(parents=True, exist_ok=True)
    handler = RotatingFileHandler(
        settings.log_dir / filename, maxBytes=_MAX_BYTES, backupCount=_BACKUPS, encoding="utf-8"
    )
    handler.setLevel(level)
    handler.setFormatter(logging.Formatter(_FORMAT))
    return handler


def setup_logging() -> None:
    """Configure console + rotating file logging once at application start."""
    root = logging.getLogger()
    if root.handlers:
        return

    root.setLevel(settings.log_level.upper())

    console = logging.StreamHandler()
    console.setFormatter(logging.Formatter(_FORMAT))

    root.addHandler(console)
    root.addHandler(_file_handler("application.log", logging.INFO))
    root.addHandler(_file_handler("error.log", logging.ERROR))

    logging.getLogger("aiosqlite").setLevel(logging.WARNING)
    logging.getLogger("httpx").setLevel(logging.WARNING)


def get_logger(name: str) -> logging.Logger:
    return logging.getLogger(name)
