from logging import Logger, LoggerAdapter
from typing import Any, List, Set, Tuple, Union

from .logging import TAG_DATA_FEED, TAG_PERF, get_logger


def get_data_logger(value: Any = None, tags: Union[str, List[str], Set[str], Tuple[str]] = None) -> Union[Logger, LoggerAdapter]:
    """ variante spécifique de 'get_logger' qui ajoute toujours le tag TAG_DATA_FEED """
    all_tags = TAG_DATA_FEED
    if tags:
        all_tags = [TAG_DATA_FEED, *tags] if isinstance(tags, (list, set, tuple)) else [TAG_DATA_FEED, tags]
    return get_logger(value, all_tags)


def data_perf_logger_factory(func):
    """ fonction de création de logger pour la performance et l'alimentation, à utiliser avec 'execution_time' ou 'query_count' """
    return get_data_logger(func, TAG_PERF)
