import logging
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path
from typing import List, Optional, Tuple

logger = logging.getLogger(__name__)


def setup_logger(
    level: str,
    filepath: Optional[Path] = None,
    serialize: bool = False,  # pylint: disable=unused-argument
    rotate: bool = True,
) -> Tuple[str, Optional[Path]]:
    """
    Configure the logger and return the log level and log filepath.
    """
    level = level.upper()

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

    formatter = logging.Formatter(
        "%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)s - %(message)s"
    )
    handlers: List[logging.Handler] = [logging.StreamHandler()]

    if filepath is not None:
        if rotate:
            handlers.append(TimedRotatingFileHandler(filepath, when="midnight"))
        else:
            handlers.append(logging.FileHandler(filepath))

    for handler in handlers:
        handler.setFormatter(formatter)
        root.addHandler(handler)

    return level, filepath