from typing import Any, Dict, Optional, Sequence
from llama_index.docstore.types import BaseDocumentStore
from llama_index.schema import BaseDocument


class EmptyDocumentStore(BaseDocumentStore):
    @classmethod
    def from_dict(cls, config_dict: Dict[str, Any]) -> "EmptyDocumentStore":
        return cls()

    def to_dict(self) -> Dict[str, Any]:
        """Serialize to dict."""
        return {}

    @property
    def docs(self) -> Dict[str, BaseDocument]:
        return {}

    def add_documents(
        self, docs: Sequence[BaseDocument], allow_update: bool = True
    ) -> None:
        pass

    def document_exists(self, doc_id: str) -> bool:
        """Check if document exists."""
        return False

    def get_document(
        self, doc_id: str, raise_error: bool = True
    ) -> Optional[BaseDocument]:
        return None

    def delete_document(self, doc_id: str, raise_error: bool = True) -> None:
        pass

    def set_document_hash(self, doc_id: str, doc_hash: str) -> None:
        """Set the hash for a given doc_id."""
        pass

    def get_document_hash(self, doc_id: str) -> Optional[str]:
        """Get the stored hash for a document, if it exists."""
        return None

    def update_docstore(self, other: "BaseDocumentStore") -> None:
        """Update docstore.

        Args:
            other (BaseDocumentStore): docstore to update from

        """
        self.add_documents(list(other.docs.values()))