using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;

namespace TakeoutSaaS.Application.App.QuotaPackages.Dto;

/// <summary>
/// 租户配额使用情况 DTO。
/// </summary>
public sealed record TenantQuotaUsageDto
{
    /// <summary>
    /// 租户 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long TenantId { get; init; }

    /// <summary>
    /// 配额类型。
    /// </summary>
    public TenantQuotaType QuotaType { get; init; }

    /// <summary>
    /// 配额上限。
    /// </summary>
    public decimal LimitValue { get; init; }

    /// <summary>
    /// 已使用值。
    /// </summary>
    public decimal UsedValue { get; init; }

    /// <summary>
    /// 剩余值。
    /// </summary>
    public decimal RemainingValue { get; init; }

    /// <summary>
    /// 配额刷新周期。
    /// </summary>
    public string? ResetCycle { get; init; }

    /// <summary>
    /// 最近一次重置时间。
    /// </summary>
    public DateTime? LastResetAt { get; init; }
}
