namespace TakeoutSaaS.Application.App.Tenants.Dto;

/// <summary>
/// 套餐使用统计 DTO（订阅关联数量、使用租户数量）。
/// </summary>
public sealed class TenantPackageUsageDto
{
    /// <summary>
    /// 套餐 ID。
    /// </summary>
    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（Monthly Recurring Revenue）粗看：按“当前有效订阅数 × 套餐月付等效价”估算。
    /// </summary>
    public decimal Mrr { get; init; }

    /// <summary>
    /// ARR（Annual Recurring Revenue）粗看：按“当前有效订阅数 × 套餐年付等效价”估算。
    /// </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; }
}
