using MediatR;

namespace StorageService.API.Application.Queries;

/// <summary>
/// EN: Query to get file by ID.
/// VI: Query để lấy file theo ID.
/// </summary>
public record GetFileQuery(Guid FileId, string UserId) : IRequest<FileDto?>;

/// <summary>
/// EN: Query to get user files.
/// VI: Query để lấy files của user.
/// </summary>
public record GetUserFilesQuery(
    string UserId, 
    int Skip = 0, 
    int Take = 20,
    string? SearchTerm = null
) : IRequest<UserFilesResult>;

/// <summary>
/// EN: Query to get user quota.
/// VI: Query để lấy quota user.
/// </summary>
public record GetUserQuotaQuery(string UserId) : IRequest<QuotaDto?>;

/// <summary>
/// EN: Query to get pre-signed download URL.
/// VI: Query để lấy pre-signed download URL.
/// </summary>
public record GetDownloadUrlQuery(
    Guid FileId, 
    string UserId,
    int ExpirationSeconds = 3600
) : IRequest<DownloadUrlResult>;
