from abc import ABC, abstractmethod
from typing import List, Dict, Any, Optional

class VectorDBInterface(ABC):
    """
    Abstract base class for vector database interfaces.
    This provides a common interface for different vector database implementations.
    """
    
    @abstractmethod
    def create_collection(self, collection_name: str) -> Any:
        """
        Create or get a collection
        
        Args:
            collection_name: Name of the collection
            
        Returns:
            The collection object
        """
        pass
    
    @abstractmethod
    def embed_markdown_files(self, markdown_dir: str, collection_name: str = "default", 
                            chunk_size: int = 500, chunk_overlap: int = 50) -> int:
        """
        Embed markdown files into the vector database
        
        Args:
            markdown_dir: Directory containing markdown files
            collection_name: Name of the collection
            chunk_size: Size of text chunks
            chunk_overlap: Overlap between chunks
            
        Returns:
            Number of documents embedded
        """
        pass
    
    @abstractmethod
    def query_collection(self, query_text: str, collection_name: str = "default", 
                        n_results: int = 5) -> Dict[str, Any]:
        """
        Query the collection
        
        Args:
            query_text: Query text
            collection_name: Name of the collection
            n_results: Number of results to return
            
        Returns:
            Query results
        """
        pass
    
    @abstractmethod
    def get_collection_info(self, collection_name: str = "default") -> Dict[str, Any]:
        """
        Get information about a collection
        
        Args:
            collection_name: Name of the collection
            
        Returns:
            Collection information
        """
        pass
