import os
import sys
import logging
from pathlib import Path


def check_environment_var(env_str: str) -> Path:
    """Liefert Path aus Umgebungsvariable oder beendet mit Fehlermeldung."""
    out_path = os.environ.get(env_str)
    if out_path:
        return Path(out_path)
    msg = f"Umgebungsvariable {env_str} ist nicht gesetzt oder leer."
    print(msg)
    sys.exit(1)


def setup_logger(log_dir: Path, name: str = 'app') -> logging.Logger:
    """
    Erstellt und konfiguriert einen Logger, der sowohl in eine Datei als auch auf die Konsole schreibt.
    Die Logdatei erhält einen Zeitstempel im Namen und ist UTF-8 kodiert.
    
    Args:
        log_dir (Path): Verzeichnis für die Log-Dateien
        name (str): Name des Loggers (z.B. 'plant2dxf', 'dxf2lib')
    Returns:
        logging.Logger: Konfigurierter Logger
    """
    from datetime import datetime
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)

    # Vorherige Handler entfernen, um doppelte Logs zu vermeiden
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)

    # Log-Verzeichnis anlegen (falls nicht vorhanden)
    log_dir.mkdir(parents=True, exist_ok=True)

    # Logdatei mit Zeitstempel im Namen erzeugen
    log_file = log_dir / f"{name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
    file_handler = logging.FileHandler(log_file, encoding='utf-8')
    file_handler.setLevel(logging.INFO)

    # Handler für die Konsole
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)

    # Einheitliches Log-Format definieren
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    # Handler dem Logger hinzufügen
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    return logger