"""Zentrales Logging-Setup für PBI Documentation by Oliver Gropp."""
from __future__ import annotations

import logging
import os
import sys
from logging.handlers import RotatingFileHandler


def setup_logging(level: str = "INFO", log_file: str | None = None) -> None:
    """Konfiguriert das Logging für die gesamte Anwendung.

    Args:
        level: Log-Level (DEBUG, INFO, WARNING, ERROR).
        log_file: Optionaler Pfad für Datei-Logging. Wenn None,
                  wird ein Standard-Pfad im App-Verzeichnis verwendet.
    """
    log_level = getattr(logging, level.upper(), logging.INFO)

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

    root = logging.getLogger()
    root.setLevel(log_level)

    # Console handler
    console = logging.StreamHandler(sys.stdout)
    console.setLevel(log_level)
    console.setFormatter(formatter)
    root.addHandler(console)

    # File handler (rotating, 5MB, 3 backups)
    if log_file is None:
        if getattr(sys, "frozen", False):
            base_dir = os.path.dirname(sys.executable)
        else:
            base_dir = os.path.dirname(os.path.abspath(__file__))
        log_file = os.path.join(base_dir, "pbi_documentation.log")

    try:
        file_handler = RotatingFileHandler(
            log_file, maxBytes=5 * 1024 * 1024, backupCount=3, encoding="utf-8"
        )
        file_handler.setLevel(log_level)
        file_handler.setFormatter(formatter)
        root.addHandler(file_handler)
    except OSError:
        # Falls Datei nicht beschreibbar (z.B. in geschütztem Verzeichnis)
        root.warning("Log-Datei konnte nicht erstellt werden: %s", log_file)
