"""Logging konfigūracija – rašome tiek į konsolę, tiek į rotacinį failą."""

from __future__ import annotations

import logging
import os
from logging.handlers import RotatingFileHandler
from pathlib import Path


def setup_logging(level: str = "INFO",
                  logfile: str = "logs/trends.log",
                  rotate_mb: int = 50,
                  backup_count: int = 5) -> logging.Logger:
    log_path = Path(logfile)
    log_path.parent.mkdir(parents=True, exist_ok=True)

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

    root = logging.getLogger()
    # Vengiame dvigubų handlerių, jei paleidimas pasikartoja
    if getattr(root, "_trends_setup", False):
        return root
    root.setLevel(getattr(logging, level.upper(), logging.INFO))

    ch = logging.StreamHandler()
    ch.setFormatter(fmt)
    root.addHandler(ch)

    fh = RotatingFileHandler(
        log_path,
        maxBytes=rotate_mb * 1024 * 1024,
        backupCount=backup_count,
        encoding="utf-8",
    )
    fh.setFormatter(fmt)
    root.addHandler(fh)

    # triukšmingi paketai
    for noisy in ("urllib3", "asyncio", "apscheduler.scheduler",
                  "apscheduler.executors.default"):
        logging.getLogger(noisy).setLevel(logging.WARNING)

    root._trends_setup = True  # type: ignore[attr-defined]
    return root


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