using LiteCqrs;
using TeleWave.Application.Common.Interfaces;

namespace TeleWave.Application.Storage;

/// <summary>
/// Чем занят диск. <paramref name="Refresh"/> — явный пересчёт: обход дерева долгий, поэтому
/// обычный запрос отдаёт кэш и его возраст.
/// </summary>
public sealed record GetStorageStatsQuery(bool Refresh = false) : IQuery<StorageStatsDto>;

public sealed record StorageAreaDto(StorageArea Area, long Bytes, int Files);

/// <param name="RootPath">Корень хранилища — на сервере их может быть несколько, и надо видеть, о каком речь.</param>
/// <param name="MinFreeSpaceBytes">Порог, ниже которого загрузка отклоняется (<c>Storage:MinFreeSpaceBytes</c>).</param>
public sealed record StorageStatsDto(
    string RootPath,
    long VolumeTotalBytes,
    long VolumeFreeBytes,
    long StorageBytes,
    int StorageFiles,
    long MinFreeSpaceBytes,
    IReadOnlyList<StorageAreaDto> Areas,
    DateTimeOffset ComputedAt
);
