using System.Text.Json.Serialization;
using TakeoutSaaS.Shared.Abstractions.Serialization;

namespace TakeoutSaaS.Application.App.TenantPackages.Contracts;

/// <summary>
/// 租户套餐使用统计 DTO。
/// </summary>
public sealed record TenantPackageUsageDto
{
    /// <summary>
    /// 套餐 ID（雪花，序列化为字符串）。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long TenantPackageId { get; init; }

    /// <summary>
    /// 活跃订阅数。
    /// </summary>
    public int ActiveSubscriptionCount { get; init; }

    /// <summary>
    /// 活跃租户数。
    /// </summary>
    public int ActiveTenantCount { get; init; }

    /// <summary>
    /// 总订阅数。
    /// </summary>
    public int TotalSubscriptionCount { get; init; }

    /// <summary>
    /// 月度经常性收入（MRR）。
    /// </summary>
    public decimal Mrr { get; init; }

    /// <summary>
    /// 年度经常性收入（ARR）。
    /// </summary>
    public decimal Arr { get; init; }

    /// <summary>
    /// 7 天内到期租户数。
    /// </summary>
    public int ExpiringTenantCount7Days { get; init; }

    /// <summary>
    /// 15 天内到期租户数。
    /// </summary>
    public int ExpiringTenantCount15Days { get; init; }

    /// <summary>
    /// 30 天内到期租户数。
    /// </summary>
    public int ExpiringTenantCount30Days { get; init; }
}
