"""Модуль environment содержит настройки окружения и URL-адресов.

Класс Environment предоставляет методы для работы с окружением,
токенами и URL-адресами API.
"""

import os
from typing import Dict

class Environment:
    """Управление окружением, URL-адресами и токенами.

    Атрибуты класса:
        TEST (str): Константа для тестового окружения.
        DEVELOP (str): Константа для dev-окружения.
        URLS (Dict[str, str]): Словарь URL для разных окружений.
    """

    TEST: str = 'test'
    DEVELOP: str = 'develop'

    URLS: Dict[str, str] = {
        TEST: 'http://192.168.2.76/',
        DEVELOP: 'http://192.168.2.69/'
    }

    def __init__(self) -> None:
        """Инициализирует объект окружения и токены."""

        try:
            self.env: str = os.getenv('ENV', self.TEST)
            self.current_user_credential = {}
        except KeyError:
            self.env: str = self.TEST

    def get_base_url(self) -> str:
        """Возвращает базовый URL для текущего окружения.

        Возвращает:
            str: Базовый URL с путем для теста или без него.
        """

        if self.env in self.URLS:
            # if self.env == self.TEST:
            #     return self.URLS[self.env] + "e-nms-ui/"
            return self.URLS[self.env]
        raise Exception(f"Unknown value of ENV variable {self.env}")

    def get_env_name(self) -> str:
        """Возвращает имя текущего окружения.

        Возвращает:
            str: имя текущего окружения.
        """
        return self.env

    def get_request_url(self) -> str:
        """Возвращает URL для API-запросов.

        Возвращает:
            str: URL для API-запросов.
        """

        if self.env in self.URLS:
            return self.URLS[self.env]
        raise Exception(f"Unknown value of ENV variable {self.env}")

    def set_current_user_credential(self, credential: {}) -> None:
        """Сохраняет учетные данные текущего пользователя.

        Аргументы:
            credential ({}): Учетные данные текущего пользователя.
        """

        self.current_user_credential = credential

    def get_access_token(self) -> str:
        """Возвращает текущий токен доступа.

        Возвращает:
            str: Текущий токен доступа.
        """

        return self.current_user_credential.get("access_token")

    def get_current_user_name(self) -> str:
        """Возвращает имя текущего пользователя.

        Возвращает:
            str: Имя текущего пользователя.
        """

        return self.current_user_credential.get("login")

    def get_current_user_role(self) -> str:
        """Возвращает роль текущего пользователя.

        Возвращает:
            str: Роль текущего пользователя.
        """

        return self.current_user_credential.get("role")

    def get_current_user_id(self) -> str:
        """Возвращает id текущего пользователя.

        Возвращает:
            str: id текущего пользователя.
        """

        return self.current_user_credential.get("$id")

    def get_current_user_credential(self) -> {}:
        """Возвращает учетные данные текущего пользователя."""

        return self.current_user_credential


host: Environment = Environment()
