from __future__ import annotations

import logging
from logging.handlers import RotatingFileHandler

from .config import get_settings

_configured = False


def configure_logging() -> None:
    global _configured
    if _configured:
        return

    settings = get_settings()
    settings.log_path.mkdir(parents=True, exist_ok=True)
    log_file = settings.log_path / "portail-frelons.log"

    formatter = logging.Formatter(
        "%(asctime)s | %(levelname)s | %(name)s | %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
    )
    file_handler = RotatingFileHandler(
        log_file,
        maxBytes=settings.log_max_bytes,
        backupCount=settings.log_backup_count,
        encoding="utf-8",
    )
    file_handler.setFormatter(formatter)

    root = logging.getLogger()
    root.setLevel(getattr(logging, settings.log_level, logging.INFO))
    if not any(isinstance(handler, RotatingFileHandler) for handler in root.handlers):
        root.addHandler(file_handler)

    for logger_name in ("uvicorn", "uvicorn.error", "uvicorn.access", "sqlalchemy.engine"):
        logging.getLogger(logger_name).setLevel(getattr(logging, settings.log_level, logging.INFO))

    _configured = True
