namespace TeleWave.Infrastructure.Media;

public sealed class StorageOptions
{
    public const string SectionName = "Storage";

    /// <summary>Корень хранилища внутри контейнера (bind-mount на /media). Фиксируется в env.</summary>
    public string RootPath { get; init; } = "/media";

    /// <summary>Длина HLS-сегмента в секундах. Длительность ассетов добивается до кратности ей.</summary>
    public int SegmentSeconds { get; init; } = 2;

    /// <summary>Хранить ли исходник в originals/ после успешной нарезки.</summary>
    public bool KeepOriginals { get; init; }

    /// <summary>Порог свободного места, ниже которого загрузка отклоняется, байт.</summary>
    public long MinFreeSpaceBytes { get; init; } = 10L * 1024 * 1024 * 1024;

    /// <summary>
    /// Через сколько часов простоя удалять брошенный файл в <c>uploads/</c>. Каталог перевалочный:
    /// после регистрации файл уходит в <c>originals/</c>, и всё, что там залежалось, — след от
    /// оборванной заливки или аварийного рестарта. Идущую заливку порог не задевает: она правит
    /// файл, и отсчёт идёт от времени последней записи. 0 — уборку не делать.
    /// </summary>
    public int StaleUploadHours { get; init; } = 24;
}
