import abc

from .metadata import AbstractMetadataEngine


class AbstractRepository(abc.ABC):
    metadata_engine = AbstractMetadataEngine

    @abc.abstractmethod
    def schemas(self) -> list[str]:
        """List schemas"""
        raise NotImplementedError

    @abc.abstractmethod
    def tables(self, schema) -> list[str]:
        """List table in schema"""
        raise NotImplementedError

    @abc.abstractmethod
    def infos(self, table: str, schema: str) -> dict[str, str]:
        """Get infos about the table"""
        raise NotImplementedError

    @abc.abstractmethod
    def read(self, table: str, schema: str):
        """Get content of the table"""
        raise NotImplementedError

    @abc.abstractmethod
    def write(self, content, table: str, schema: str):
        """Write content into the table"""
        raise NotImplementedError

    @abc.abstractmethod
    def delete_table(self, table: str, schema: str):
        """Delete the table"""
        raise NotImplementedError