using Microsoft.Extensions.Options;
using TeleWave.Infrastructure.Media;

namespace TeleWave.Api.Common;

/// <summary>
/// Лимиты приёма файла, собранные в одно место. Они живут в двух разных секциях конфигурации
/// (<c>Media</c> и <c>Storage</c>), но проверяются всегда вместе и только на входе загрузки —
/// хендлеру незачем знать про обе секции и тащить два <see cref="IOptions{T}"/> в сигнатуре.
/// </summary>
public sealed class UploadLimits(IOptions<MediaOptions> media, IOptions<StorageOptions> storage)
{
    /// <summary>Потолок размера загружаемого файла.</summary>
    public long MaxUploadBytes { get; } = media.Value.MaxUploadBytes;

    /// <summary>Сколько места должно остаться свободным после приёма файла.</summary>
    public long MinFreeSpaceBytes { get; } = storage.Value.MinFreeSpaceBytes;
}
