"""
Порты (интерфейсы) для hexagonal architecture
"""
from abc import ABC, abstractmethod
from typing import Optional
import pandas as pd


class ParserPort(ABC):
    """Интерфейс для парсеров"""

    @abstractmethod
    def parse(self, file_path: str, params: dict) -> pd.DataFrame:
        """Парсинг файла и возврат DataFrame"""
        pass

    @abstractmethod
    def get_value(self, df: pd.DataFrame, params: dict):
        """Получение значения из DataFrame по параметрам"""
        pass

    # @abstractmethod
    # def get_schema(self) -> dict:
    #     """Возвращает схему входных параметров для парсера"""
    #     pass


class StoragePort(ABC):
    """Интерфейс для хранилища данных"""

    @abstractmethod
    def save_dataframe(self, df: pd.DataFrame, object_id: str) -> bool:
        """Сохранение DataFrame"""
        pass

    @abstractmethod
    def load_dataframe(self, object_id: str) -> Optional[pd.DataFrame]:
        """Загрузка DataFrame"""
        pass

    @abstractmethod
    def delete_object(self, object_id: str) -> bool:
        """Удаление объекта"""
        pass

    @abstractmethod
    def object_exists(self, object_id: str) -> bool:
        """Проверка существования объекта"""
        pass
