from abc import (
    ABCMeta,
)

from function_tools.managers import (
    RunnerManager,
)

from edu_rdm_integration.adapters.runners import (
    WebEduRunner,
)


class WebEduRunnerManager(RunnerManager, metaclass=ABCMeta):
    """Базовый класс менеджеров исполнителей функций продуктов Образования.

    Предоставляет базовую функциональность для управления исполнителями
    (runners) функций в контексте образовательных продуктов. Наследует
    возможности RunnerManager и адаптирует их для специфики образовательной
    системы.

    Основные возможности:
    - Создание и инициализация исполнителей функций
    - Управление жизненным циклом исполнителей
    - Конфигурация исполнителей для образовательных задач
    - Интеграция с системой образовательных продуктов

    Note:
        - Является абстрактным классом
        - Требует реализации в конкретных менеджерах
        - Использует WebEduRunner как базовый класс исполнителей
        - Интегрируется с другими компонентами системы образования
        - Обеспечивает единообразное управление исполнителями

    See Also:
        - RunnerManager: базовый класс для управления исполнителями
        - WebEduRunner: базовый класс исполнителей
        - WebEduRunnerCacheStorage: хранилище кеша для исполнителей
    """

    @classmethod
    def _prepare_runner_class(cls) -> type[WebEduRunner]:
        """Возвращает класс исполнителя для образовательных функций.

        Определяет WebEduRunner как базовый класс для всех исполнителей
        в системе образовательных продуктов. Этот метод вызывается при
        создании новых исполнителей.

        Returns:
            type[WebEduRunner]: Класс исполнителя WebEduRunner

        Note:
            - Метод является частью инициализации исполнителей
            - Переопределяет метод базового класса RunnerManager
            - Гарантирует использование правильного типа исполнителя
            - Может быть переопределен в наследниках для специфических исполнителей

        See Also:
            - WebEduRunner: базовый класс исполнителей
        """
        return WebEduRunner
