<?php

declare(strict_types=1);

namespace App\Framework\Notification\Channels;

use App\Framework\Notification\Notification;
use App\Framework\Notification\ValueObjects\NotificationChannel;

/**
 * Interface for notification delivery channels
 *
 * Each channel implementation handles delivery via a specific medium
 */
interface NotificationChannelInterface
{
    /**
     * Send notification via this channel
     *
     * @param Notification $notification The notification to send
     * @return ChannelResult Result of the delivery attempt
     */
    public function send(Notification $notification): ChannelResult;

    /**
     * Check if this channel supports the given notification
     *
     * @param Notification $notification The notification to check
     * @return bool True if this channel can deliver the notification
     */
    public function supports(Notification $notification): bool;

    /**
     * Get the channel type identifier
     *
     * @return NotificationChannel The channel type
     */
    public function getChannel(): NotificationChannel;
}
