from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any


@dataclass
class DeliveryResult:
    success: bool
    message_id: str | None = None
    error: str | None = None
    response_meta: dict[str, Any] | None = None


class NotificationChannel(ABC):
    """Base interface for all notification channels"""
    
    @abstractmethod
    async def send(self, target: str, content: str, **kwargs) -> DeliveryResult:
        """Send notification to target recipient"""
        pass
    
    @property
    @abstractmethod
    def channel_name(self) -> str:
        """Channel identifier (telegram, email, vk)"""
        pass
