using MediatR;
using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Application.App.Subscriptions.Commands;

/// <summary>
/// 处理订阅到期：到期进入宽限期，宽限期结束自动暂停。
/// </summary>
public sealed record ProcessSubscriptionExpiryCommand : IRequest<ProcessSubscriptionExpiryResult>
{
    /// <summary>
    /// 宽限期天数。
    /// </summary>
    [Range(0, 365, ErrorMessage = "宽限期天数必须在 0~365 之间")]
    public int GracePeriodDays { get; init; } = 7;
}

/// <summary>
/// 订阅到期处理结果。
/// </summary>
public sealed record ProcessSubscriptionExpiryResult
{
    /// <summary>
    /// 从 Active 进入宽限期的数量。
    /// </summary>
    public int EnteredGracePeriodCount { get; init; }

    /// <summary>
    /// 宽限期到期并暂停的数量。
    /// </summary>
    public int SuspendedCount { get; init; }
}

