<?php

declare(strict_types=1);

namespace App\Framework\Logging;

/**
 * Interface für Logger, die Channel-spezifisches Logging unterstützen
 *
 * Logger, die dieses Interface implementieren, können Channel-Logger erstellen
 * und in spezifische Channels loggen.
 */
interface SupportsChannels
{
    /**
     * Holt einen Channel-Logger für einen spezifischen Channel
     *
     * Beispiel:
     * $logger->channel(LogChannel::SECURITY)->info('Login successful');
     * $logger->channel('custom-channel')->debug('Custom log');
     *
     * @param LogChannel|string $channel Channel Enum oder String-Name
     * @return Logger&HasChannel Channel-spezifischer Logger
     */
    public function channel(LogChannel|string $channel): Logger&HasChannel;

    /**
     * Log in einen spezifischen Channel
     *
     * @internal Wird von ChannelLogger verwendet
     */
    public function logToChannel(
        LogChannel $channel,
        LogLevel $level,
        string $message,
        ?\App\Framework\Logging\ValueObjects\LogContext $context = null
    ): void;
}
