using MediatR;
using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Application.App.Subscriptions.Commands;

/// <summary>
/// 处理自动续费：为开启自动续费且即将到期的订阅生成续费账单。
/// </summary>
public sealed record ProcessAutoRenewalCommand : IRequest<ProcessAutoRenewalResult>
{
    /// <summary>
    /// 到期前 N 天生成续费账单。
    /// </summary>
    [Range(0, 365, ErrorMessage = "续费提前天数必须在 0~365 之间")]
    public int RenewalDaysBeforeExpiry { get; init; } = 3;
}

/// <summary>
/// 自动续费处理结果。
/// </summary>
public sealed record ProcessAutoRenewalResult
{
    /// <summary>
    /// 扫描到的候选订阅数量。
    /// </summary>
    public int CandidateCount { get; init; }

    /// <summary>
    /// 实际创建的账单数量。
    /// </summary>
    public int CreatedBillCount { get; init; }
}

