import logging
import os
from dotenv import load_dotenv

# Загрузка переменных из .env
load_dotenv()

class CustomLogger:
    """
    Универсальный логгер для использования в проекте.
    """

    def __init__(self, name, log_level=None):
        """
        Инициализирует логгер.

        :param name: Имя логгера (обычно имя функции или класса)
        :param log_level: Уровень логирования (по умолчанию из .env)
        """
        self.logger = logging.getLogger(name)

        # Уровень логирования по умолчанию из .env
        default_level = os.getenv("LOG_LEVEL", "INFO").upper()
        if log_level:
            self.log_level = getattr(logging, log_level.upper(), getattr(logging, default_level, logging.INFO))
        else:
            self.log_level = getattr(logging, default_level, logging.INFO)

        self.setup_logger()

    def setup_logger(self):
        """
        Настраивает логгер с обработчиком и форматом.
        """
        self.logger.setLevel(self.log_level)

        # Удаляем старые обработчики, чтобы избежать дублирования
        if self.logger.hasHandlers():
            self.logger.handlers.clear()

        # Добавляем обработчик для файла
        file_handler = logging.FileHandler("var/log/project.log")
        file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
        file_handler.setLevel(self.log_level)

        # Добавляем обработчик для консоли
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(logging.Formatter("%(name)s - %(levelname)s - %(message)s"))
        console_handler.setLevel(self.log_level)

        self.logger.addHandler(file_handler)
        self.logger.addHandler(console_handler)

    def get_logger(self):
        """
        Возвращает настроенный логгер.
        """
        return self.logger
