namespace ErsatzTV.Core.Interfaces.Streaming;
///
/// Fetches a remote (http/https) image for the graphics engine, under a bounded timeout and a
/// bounded response size.
///
public interface IRemoteImageFetcher
{
///
/// Fetches fully into memory.
///
///
/// A seekable, fully-buffered stream positioned at zero. The caller owns and must dispose it.
///
///
/// Throws rather than returning a failure value: every call site already wraps element
/// initialization in a catch that disables the element, so a throw degrades to "no watermark"
/// rather than a killed stream. An implementation's own deadline should surface as
/// and caller cancellation as
/// — though note the current call sites catch both
/// alike, so today the distinction only sharpens the log message.
///
Task Fetch(Uri uri, CancellationToken cancellationToken);
}