using MediatR;
using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Application.App.Subscriptions.Commands;

/// <summary>
/// 处理续费提醒：按到期前指定天数批量创建站内提醒通知（幂等）。
/// </summary>
public sealed record ProcessRenewalRemindersCommand : IRequest<ProcessRenewalRemindersResult>
{
    /// <summary>
    /// 提醒时间点（到期前 N 天）。
    /// </summary>
    [MinLength(1, ErrorMessage = "至少需要配置一个提醒时间点")]
    public IReadOnlyList<int> ReminderDaysBeforeExpiry { get; init; } = [7, 3, 1];
}

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

    /// <summary>
    /// 实际创建的提醒数量。
    /// </summary>
    public int CreatedReminderCount { get; init; }
}

