"""
Modele danych współdzielone przez wszystkie moduły.

Odpowiedzialność:
- Definiuje dataclassy/Pydantic modele: Backend, ToolMapping, ToolDefinition
- Nie zawiera żadnej logiki biznesowej
- Importowany przez wszystkie inne moduły — brak zależności wewnętrznych
"""

from dataclasses import dataclass, field
from typing import Any


@dataclass
class Backend:
    id: str
    url: str
    transient: bool = False
    enabled: bool = True


@dataclass
class ToolDefinition:
    name: str
    description: str
    input_schema: dict[str, Any]


@dataclass
class ToolMapping:
    public_name: str
    backend: Backend
    original_name: str
    definition: ToolDefinition


@dataclass
class ResourceDescriptor:
    uri: str
    name: str
    description: str | None = None
    mime_type: str | None = None


@dataclass
class ResourceMapping:
    public_uri: str
    backend: Backend
    original_uri: str
    descriptor: ResourceDescriptor


@dataclass
class ResourceTemplateDescriptor:
    """Opisuje resource template (URI z parametrami `{name}` per RFC 6570)
    eksponowany przez backend MCP. Backend matchuje konkretne URI po swojej
    stronie — gateway routuje read/subscribe na podstawie tego, czy URI
    klienta pasuje do uri_template."""
    uri_template: str
    name: str
    description: str | None = None
    mime_type: str | None = None


@dataclass
class ResourceTemplateMapping:
    public_template: str
    backend: Backend
    original_template: str
    descriptor: ResourceTemplateDescriptor
