"""
Classe base astratta per gli exporter di report.

Definisce l'interfaccia che tutti gli exporter devono implementare.
"""

from abc import ABC, abstractmethod

from dataprofiler.models.dataset_profile import DatasetProfile


class BaseExporter(ABC):
    """Classe base astratta per tutti gli exporter.

    Ogni exporter genera un report in un formato specifico
    (Markdown, JSON, HTML) a partire da un DatasetProfile.

    Il pattern Strategy permette di scambiare l'exporter
    senza modificare il Profiler.
    """

    @abstractmethod
    def export(self, profile: DatasetProfile, output_path: str) -> None:
        """Esporta il profilo del dataset in un file.

        Args:
            profile: Il profilo del dataset da esportare.
            output_path: Percorso del file di output.

        Raises:
            ExportError: Se l'esportazione fallisce.
        """
        ...

    @abstractmethod
    def to_string(self, profile: DatasetProfile) -> str:
        """Genera il report come stringa (senza scrivere su file).

        Args:
            profile: Il profilo del dataset.

        Returns:
            Stringa con il report formattato.
        """
        ...
