"""Abstrakte Basisklasse für alle Power BI Konnektoren."""
from abc import ABC, abstractmethod

from core.models import ConnectionConfig, ReportMetadata


class IConnector(ABC):
    """Gemeinsames Interface für alle Verbindungsmethoden."""

    @abstractmethod
    def connect(self, config: ConnectionConfig) -> None:
        """Stellt Verbindung her."""
        ...

    @abstractmethod
    def extract_metadata(self) -> ReportMetadata:
        """Extrahiert alle verfügbaren Metadaten."""
        ...

    @abstractmethod
    def disconnect(self) -> None:
        """Trennt die Verbindung."""
        ...

    @abstractmethod
    def test_connection(self) -> bool:
        """Prüft ob die Verbindung funktioniert."""
        ...
