using MediatR;

namespace StorageService.API.Application.Commands.Admin;

/// <summary>
/// EN: Command to update a user's storage quota (Admin only).
/// VI: Command để cập nhật quota storage của user (chỉ Admin).
/// </summary>
public record UpdateUserQuotaCommand(
    string TargetUserId,
    long MaxStorageBytes,
    int MaxFileCount,
    string? QuotaTier = null
) : IRequest<UpdateUserQuotaResult>;

/// <summary>
/// EN: Result of quota update operation.
/// VI: Kết quả thao tác cập nhật quota.
/// </summary>
public record UpdateUserQuotaResult(
    bool Success,
    QuotaUpdatedDto? Data,
    string? Error);

/// <summary>
/// EN: DTO for updated quota information.
/// VI: DTO cho thông tin quota đã cập nhật.
/// </summary>
public record QuotaUpdatedDto(
    string UserId,
    long MaxStorageBytes,
    long UsedStorageBytes,
    int MaxFileCount,
    int CurrentFileCount,
    string? QuotaTier,
    DateTime UpdatedAt);
