using System.ComponentModel.DataAnnotations;

namespace TakeoutSaaS.Module.Scheduler.Options;

/// <summary>
/// 订阅自动化相关配置（续费提醒、自动续费、宽限期处理）。
/// </summary>
public sealed class SubscriptionAutomationOptions
{
    /// <summary>
    /// 自动续费任务执行小时（UTC）。
    /// </summary>
    [Range(0, 23)]
    public int AutoRenewalExecuteHourUtc { get; set; } = 1;

    /// <summary>
    /// 自动续费：到期前 N 天生成续费账单。
    /// </summary>
    [Range(0, 365)]
    public int AutoRenewalDaysBeforeExpiry { get; set; } = 3;

    /// <summary>
    /// 续费提醒任务执行小时（UTC）。
    /// </summary>
    [Range(0, 23)]
    public int RenewalReminderExecuteHourUtc { get; set; } = 10;

    /// <summary>
    /// 续费提醒：到期前 N 天发送提醒。
    /// </summary>
    [MinLength(1)]
    public int[] ReminderDaysBeforeExpiry { get; set; } = [7, 3, 1];

    /// <summary>
    /// 订阅到期检查任务执行小时（UTC）。
    /// </summary>
    [Range(0, 23)]
    public int SubscriptionExpiryCheckExecuteHourUtc { get; set; } = 2;

    /// <summary>
    /// 宽限期天数。
    /// </summary>
    [Range(0, 365)]
    public int GracePeriodDays { get; set; } = 7;
}

