from abc import ABC, abstractmethod
from typing import Tuple


class BaseIntegrationService(ABC):
    """
    Базовый класс для всех интеграционных сервисов.
    Определяет общий интерфейс для работы с внешними API.
    """

    def __init__(self, config):
        """
        Args:
            config: Экземпляр модели интеграции (наследник BaseIntegration)
        """
        self.config = config

    @abstractmethod
    def test_connection(self) -> Tuple[bool, str]:
        """
        Проверить соединение с внешним API.

        Returns:
            tuple: (success: bool, message: str)
        """
        pass

    @abstractmethod
    def sync(self) -> Tuple[bool, str]:
        """
        Выполнить основную операцию синхронизации.

        Returns:
            tuple: (success: bool, message: str)
        """
        pass

    def is_available(self) -> bool:
        """
        Проверить, готова ли интеграция к использованию.

        Returns:
            bool: True если интеграция активна и настроена
        """
        return (
            self.config.is_active and
            self.config.is_configured
        )
