"""
Base AI Provider interface (Strategy pattern)
"""
from abc import ABC, abstractmethod
from typing import Optional, Dict, Any


class AIProvider(ABC):
    """Abstract base class for AI providers"""

    @abstractmethod
    def summarize(self, text: str, **kwargs) -> str:
        """Generate summary of text"""
        pass

    @abstractmethod
    def correct_text(self, text: str, **kwargs) -> str:
        """Correct grammar and spelling in text"""
        pass

    @abstractmethod
    def classify_content(self, text: str, **kwargs) -> Dict[str, Any]:
        """Classify content into categories"""
        pass

    @abstractmethod
    def generate_text(self, prompt: str, **kwargs) -> str:
        """Generate text from prompt"""
        pass

    @abstractmethod
    def fix_latex(self, latex_code: str, error_log: str, **kwargs) -> str:
        """Fix broken LaTeX code based on compiler error log"""
        pass

    @abstractmethod
    def is_available(self) -> bool:
        """Check if provider is available and configured"""
        pass

    @property
    @abstractmethod
    def name(self) -> str:
        """Provider name"""
        pass
