namespace OmsorgCore.Application.Abstractions;

/// <summary>
/// Port für die physische Dateiablage eines <see cref="Domain.Entities.Document"/> — getrennt vom
/// Repository (das nur Metadaten in der DB verwaltet), weil die Bytes bewusst NICHT als Blob in
/// Postgres liegen, sondern auf dem Dateisystem (siehe omsorgCore/CLAUDE.md, Dokumentenarchiv).
/// </summary>
public interface IDocumentStorage
{
    /// <summary>
    /// Schreibt den Inhalt auf die Storage und liefert den relativen <c>StorageKey</c>, unter dem
    /// er später wiedergefunden wird.
    /// </summary>
    Task<string> SaveAsync(string entityType, Guid entityId, Guid documentId, string originalFileName, Stream content, CancellationToken cancellationToken = default);

    Task<Stream> OpenReadAsync(string storageKey, CancellationToken cancellationToken = default);
}
