"""Type stubs for tnfr.extensions.base"""

from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional, Type

@dataclass
class PatternDefinition:
    name: str
    sequence: List[str]
    description: str
    use_cases: List[str] = ...
    health_requirements: Dict[str, float] = ...
    domain_context: Dict[str, Any] = ...
    examples: List[Dict[str, Any]] = ...

@dataclass
class CookbookRecipe:
    name: str
    description: str
    sequence: List[str]
    parameters: Dict[str, Any] = ...
    expected_health: Dict[str, float] = ...
    validation: Dict[str, Any] = ...

class TNFRExtension(ABC):
    @abstractmethod
    def get_domain_name(self) -> str: ...
    @abstractmethod
    def get_pattern_definitions(self) -> Dict[str, PatternDefinition]: ...
    @abstractmethod
    def get_health_analyzers(self) -> Dict[str, Type]: ...
    def get_cookbook_recipes(self) -> Dict[str, CookbookRecipe]: ...
    def get_visualization_tools(self) -> Dict[str, Type]: ...
    def get_metadata(self) -> Dict[str, Any]: ...
